首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QString - UTF8嵌入16位?

QString - UTF8嵌入16位?
EN

Stack Overflow用户
提问于 2015-12-03 11:34:30
回答 1查看 905关注 0票数 6

我很惊讶。我开始研究QString::data(),同时试图帮助这里的另一个提问者解决QString与ASCII相关的问题。

我做了下面的代码,查看每16位包的QString数据,发现像‘a’和‘这样的字母似乎被编码在UTF-8中,但是使用16位来存储8位。当然,他们可以为所欲为,但医生说,QString将在UTF-16。但在我看来不一样。

校正:QT4.8的QString文档没有真正提到UTF-16。但它也没有说明UTF-8与16位一起使用。

拜托,有人能指点我吗?

我的代码:

代码语言:javascript
复制
QString h("AßB");

char * pt = (char*)h.data();

for(int i = 0; ;i+=2) {

   // get 16bit value
   u_int16_t s = *(u_int16_t*)(pt + i);

   // break condition
   if(s == 0) break;

   qDebug() << i << s << QChar(s) << h.size();
}

qDebug()告诉我的是:

代码语言:javascript
复制
0 65 'A' 4 
2 195 'Ã' 4 
4 159 '' 4 
6 66 'B' 4 

请注意,在编码的两个部分仍然使用16位时,‘ENT-8’似乎是编码的。

195 159是编码‘UTF’的UTF-8。

我的char地图告诉我,UTF-16的表示应该是0x00DF表示‘。这就是我希望得到的。

还请注意,QString::size()报告的大小有问题的是4而不是3。

EN

回答 1

Stack Overflow用户

发布于 2016-08-17 19:22:40

QString数据以Unicode的形式在内部存储。来自qt文档:

代码语言:javascript
复制
QString str = "Hello";

"QString使用fromUtf8()函数将const *数据转换为Unicode。“

下面是链接:QString类

奇怪的是,我没有看到任何toUTF16()方法;尽管它确实有一个toUTF8方法。

此外,UTF-16不是Unicode:

“Unicode标准对范围U+0000..U+10FFFF中的字符进行编码,这相当于一个21位的代码空间。根据您选择的编码形式(UTF-8、UTF-16或UTF-32),每个字符将被表示为一到四个8位字节、一个或两个16位代码单元的序列,或者是一个32位代码单元。”

来自:常见问题- UTF-8,UTF-16,UTF-32 & BOM

编辑:

我知道MSVC曾经用于编译Unicode和非Unicode构建。来自M$:

"Unicode UTF-16编码

将Unicode字符表示为16位整数的序列.您的应用程序可以使用UnicodeEncoding类将字符转换为UTF-16编码。

经常本机使用UTF-16,例如在Microsoft.Net char类型、Windows类型和其他常见类型中。大多数常见的Unicode代码点只需要一个UTF-16代码点(2个字节)。Unicode补充字符U+10000及更高版本仍然需要两个UTF-16代码点.“

.NET框架3.5 -使用Unicode编码上发现的。

因此,M$经常在内部使用UTF-16。Unicode是21位长的符号列表,有多种UTF格式对它们进行编码。

这对Ubuntu有什么影响?M$在UTF-16内部编码,并称它们为Unicode。

显然发现了代码中的问题:编译器使用源文件的编码来生成字符串文本。奇怪的是,它使用了16位的编码,并得到了UTF-8的值,从而产生了错误的字符序列!我在想,如果你把QString打印出来,它是否会以"A“的形式出现。这可能是它被转换回相同的UTF-8之前,你从来没有看到它,尽管编译器显然不理解它。Frank和您已经能够证明,在Ubuntu上,Qt使用了UTF-16。似乎在没有编码(即21位)的情况下,几乎看不到计算机数据中的Unicode字符。"Unicode“构建显然是UTF-16构建。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34065001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档