Tôi có một std::string content
cái mà tôi biết có chứa dữ liệu UTF-8. Tôi muốn chuyển đổi nó thành a QString
. Làm cách nào để làm điều đó, tránh chuyển đổi from-ASCII trong Qt?
Câu trả lời:
Có một QString
hàm được gọi là fromUtf8
có const char*
:
QString str = QString::fromUtf8(content.c_str());
std::string
được mã hóa bằng UTF8 (thực ra mã hóa không xác định), vì vậy câu trả lời này không hoàn toàn chính xác. Ít nhất bạn nên kiểm tra mã hóa bằng một xác nhận.
QString::fromStdString(content)
tốt hơn vì nó mạnh mẽ hơn. Cũng lưu ý rằng nếu std::string
được mã hóa bằng UTF-8, thì nó sẽ cho kết quả chính xác giống như QString::fromUtf8(content.data(), int(content.size()))
.
std::string
được mã hóa bằng UTF8 (thực sự là mã hóa không xác định), vì vậy QString::fromUtf8(content.data(), int(content.size()))
có thể cho kết quả khác (và cũng không chính xác) hơn QString::fromStdString(content)
.
Thông thường, cách tốt nhất để thực hiện chuyển đổi là sử dụng phương thức fromUtf8 , nhưng vấn đề là khi bạn có chuỗi phụ thuộc vào ngôn ngữ.
Trong những trường hợp này, bạn nên sử dụng fromLocal8Bit . Thí dụ:
std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());
QString::fromUtf8( content.data(), content.size() )