2012-01-02 10 views
16

Trong ứng dụng Qt của tôi, các tệp mã nguồn của tôi được mã hóa dưới dạng UTF-8. Đối với các mã sau đây ...Đặt mã hóa mặc định Qt thành UTF-8

QMessageBox::critical(this, "Nepoznata pogreška", "Dogodila se nepoznata pogreška! Želite li zatvoriti ovaj program ?", QMessageBox::Yes, QMessageBox::No); 

... khi tôi hiển thị hộp thư đó, ký tự "š" sẽ không được hiển thị là "š", nhưng là điều lạ. Điều này là do Qt chuyển đổi tất cả các chuỗi C như thể chúng được mã hóa bằng LATIN-1. Để giải quyết vấn đề này, tôi đã sử dụng:

QMessageBox::critical(this, QString::fromUtf8("Nepoznata pogreška"), QString::fromUtf8("Dogodila se nepoznata pogreška! Želite li zatvoriti ovaj program ?"), QMessageBox::Yes, QMessageBox::No); 

Có cách nào để loại bỏ tất cả các cuộc gọi đến QString::fromUtf8()?

+0

http://stackoverflow.com/questions/29485602/qt-convert-unicode-entites – trante

Trả lời

28
+0

Huh, cảm thấy ngu ngốc ngay bây giờ: DI không biết rằng nó tồn tại;) Cảm ơn :) – xx77aBs

+1

Đừng cho rằng một cái gì đó như điều này có thể được thực hiện cho qt5? Dường như setCodecForCStrings đã bị xóa ... – ntzrmtthihu777

+2

Tôi e rằng mình không thể trả lời chắc chắn vì tôi không làm bất cứ thứ gì sử dụng Qt nữa. Tôi đoán là Qt5 giả định rằng tất cả các tệp nguồn đều được mã hoá UTF-8 (chứ không phải là Latin-1) sẽ giải thích lý do tại sao chúng loại bỏ điều này. Nếu bạn gặp vấn đề tương tự với vấn đề này thì tôi chỉ kiểm tra tất cả các tệp nguồn của bạn được mã hóa UTF-8 bằng trình soạn thảo văn bản của lập trình viên yêu thích của bạn (ví dụ: Notepad ++)? –

0

Về "đoán" rằng "Qt5 giả định tất cả các tệp nguồn được mã hóa UTF-8": Thiago Macieira giải thích quyết định của nhà phát triển Qt here.

Giả định có thể bị vô hiệu hóa với QT_NO_CAST_FROM_ASCII theo tài liệu.