2011-11-08 5 views
6

Tôi đang sử dụng QSettings để lưu trữ một số cài đặt trong tệp INI. Tuy nhiên, chương trình của tôi không phải bằng tiếng Anh, vì vậy một số cài đặt chứa chuỗi Unicode. Dường như Qt ghi các tệp INI không có trong utf8 hoặc utf16, nhưng trong một số mã hóa khác, chuỗi "Привет мир!" (rus. "Xin chào thế giới!") trông giống như sau:QSettings không xử lý unicode tốt

WindowTitle=\x41f\x440\x438\x432\x435\x442 \x43c\x438\x440! 

Tôi muốn chỉnh sửa tệp cài đặt bằng tay, nhưng tôi không thể làm việc với nó như thế này. Có cách nào để buộc Qt để lưu trong Unicode?

Trả lời

16

Kiểm tra setIniCodec chức năng của QSettings

Thiết lập các codec để truy cập vào các file INI (bao gồm conf file trên Unix) đến codec. Bộ giải mã được sử dụng để giải mã mọi dữ liệu được đọc từ tệp INI và để mã hóa mọi dữ liệu được ghi vào tệp. Theo mặc định, không sử dụng codec và các ký tự không phải ASCII được mã hóa sử dụng chuỗi thoát INI chuẩn.

Vì vậy, bạn nên gọi nó với các codec mà bạn muốn, ví dụ như

QSettings settings; 
settings.setIniCodec("UTF-8"); 

Chú ý rằng bạn phải gọi nó ngay lập tức sau khi tạo các đối tượng QSettings và trước khi truy cập bất kỳ dữ liệu.

+0

Cảm ơn. Đáng tiếc là tôi đã sử dụng QJson cho tập tin cấu hình :) – Septagram

+0

Hoạt động hoàn hảo, tôi đã xóa QJson, vì vậy một phụ thuộc ít hơn)) – Septagram

+0

Điều cần biết :) – pnezis