我想获得乘法符号×
的Latin1代码,但当我检查QChar
中的值-41'×'
时。
我的代码:
QString data = "×";
QChar m = data.at(0);
unsigned short ascii = (unsigned short)m.toLatin1();
当我调试时,在第二行中,我看到QChar
值为-41'×'
。
我更改了代码:
unsigned int ascii = c.unicode();
但我得到215的值而不是我期望的是158.
答案 0 :(得分:4)
乘号×
不是ascii符号,如果您使用的是unix系统,可以在查看man ascii
时看到。
它的值取决于编码,请参阅here的UTF表示。
例如,在UTF-8上,它具有值0xC397
,它是两个字节。
正如在unicode页面上提到的,我链接215是用UTF-16编码表示该字符的十进制值,这是c.unicode()
返回的。
我不知道你为什么期待158。
虽然有一个ascii乘法符号,*
。
答案 1 :(得分:1)
如果您查看Latin1 code table,很明显×
确实编码为215或-41。 Qt正在给你正确的结果。
你的错误是:
假设Latin1等同于ASCII。 Latin1只包含ASCII,但它是超集:它定义的代码比ASCII多2倍。
假设×
在ASCII中表示。事实并非如此。
我不知道你认为Latin1编码的×
应该是158.肯定它不是来自Latin1代码表!顺便说一下,×
的Latin1和UTF-8编码是相同的。