gpt4 book ai didi

qt - QString::toUtf8 在做什么?

转载 作者:行者123 更新时间:2023-12-03 21:48:56 31 4
gpt4 key购买 nike

这听起来像是一个显而易见的问题,但我错过了一些关于 UTF-8 的编码方式或 toUtf8 函数如何工作的信息。

我们来看一个非常简单的程序

QString str("Müller");
qDebug() << str << str.toUtf8().toHex();

然后我得到输出
"Müller" "4dc383c2bc6c6c6572" 

但我明白了 letter ü应该被编码为 c3bc 而不是 c383c2bc。

谢谢
约翰

最佳答案

这取决于源代码的编码。

我倾向于认为您的文件已经以 UTF-8 编码,字符 ü 被编码为 C3 BC。

您调用QString::QString ( const char * str )构造函数,根据 http://doc.qt.io/qt-4.8/qstring.html#QString-8 , 使用 QString::fromAscii() 方法将您的字符串转换为 unicode,该方法默认将输入视为 Latin1 内容。

由于 C3 和 BC 在拉丁文 1 中都有效,分别代表 Ã 和 ¼,将它们转换为 UTF-8 将导致以下字符:

à (C3) -> C3 83

¼ (BC) -> C2 BC

这导致您得到的字符串:“4d c3 83 c2 bc 6c 6c 65 72”

总而言之,它是双重 UTF-8 编码。

有几个选项可以解决这个问题:

1) 您可以使用您喜欢的文本编辑器将源文件转换为 Latin-1。

2)您可以正确地将 ü 字符转义到 litteral 字符串中的\xFC 中,因此该字符串将不依赖于文件的编码。

3) 您可以将文件和字符串保留为 UTF-8 数据并使用 QString str = QString::fromUtf8 ("Müller");
更新 : 这个问题在 QT5 中不再相关。 http://doc.qt.io/qt-5/qstring.html#QString-8声明构造函数现在使用 QString::fromUtf8()内部而不是 QString::fromAscii() .因此,只要始终使用 UTF-8 编码,就会默认使用它。

关于qt - QString::toUtf8 在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4853134/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com