我很惊讶.我开始QString::data()
尝试用QString与ASCII相关的问题来帮助另一位提问者.
我制作了下面一段代码来查看QString数据的每个16位包,发现像'ä'和'ß'这样的字母似乎是用UTF-8编码的,但是用16位来存储8位.当然他们可以按自己喜欢的方式做,但是文档说QString是UTF-16.但它看起来与我不同.
更正:Qt 4.8的QString doc并没有真正提到UTF-16.但它也没有声明UTF-8与16位一起使用.
拜托,有人可以开导我!
我的代码:
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()告诉我的是:
0 65 'A' 4 2 195 'Ã' 4 4 159 '' 4 6 66 'B' 4
请注意,'ß'似乎是UTF-8编码,同时仍然对编码的两个部分使用16位.
195 159是'ß'的UTF-8编码.
我的char图告诉我'ß'的UTF-16表示应该是0x00DF.这就是我希望得到的.
另请注意,QString::size()
报告的可疑大小为4而不是3.