Chuyển std :: string thành QString


81

Tôi có một std::string contentcá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:


92

Có một QStringhàm được gọi là fromUtf8const char*:

QString str = QString::fromUtf8(content.c_str());

19
Hiệu quả hơn:QString::fromUtf8( content.data(), content.size() )
Marc Mutz - mmutz

2
Trong tiêu chuẩn C ++ không có gì đảm bảo, 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.
plasmacel

101

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())).


4
Chỉ ở Qt5. Trong Qt4, nó sử dụng QString :: fromAscii.
Rémi Benoit,

3
Đây phải là câu trả lời được chấp nhận. Tuy nhiên câu nói cuối cùng của bạn không nhất thiết phải đúng. Trong tiêu chuẩn C ++, không có gì đảm bảo, 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).
plasmacel

8

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());

5

Qt5 fromStdString sử dụng nội bộ fromUtf8, vì vậy bạn có thể sử dụng cả hai:

inline QString QString::fromStdString(const std::string& s) 
{
return fromUtf8(s.data(), int(s.size()));
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.