两种情况下wchar_t字符的积分值之间的差异

时间:2013-07-08 12:42:34

标签: c++ unicode wchar-t

当我使用此代码在unicode中获取'س'的整数值时,我得到1587(十六进制为633)。这是unicode标准中'س'的正确值。

wchar_t wc = L'س';
cout<<wc; // or wcout<<int(wc);

现在,我将此字符放入带有UTF-8字符编码的txt文件中,然后以十六进制模式检查其值。我获得了d8 b3,意思是十进制的55475。

为什么这些值不是马赫?

已添加:这是我的代码:

wchar_t wc = L'س';
FILE *f;
f = fopen("input1.txt", "w");
_setmode(_fileno(f), _O_U8TEXT);
fwprintf(f, L"%c", wc);
fclose(f);

2 个答案:

答案 0 :(得分:1)

UTF-8不使用所有位来表示字符,因为它需要至少一位来表示字符点跨越更多字节。 你可以在这里看到它:https://en.wikipedia.org/wiki/UTF-8

http://www.cl.cam.ac.uk/~mgk25/unicode.html开始,有代码点范围及其二进制表示:

U-00000000 – U-0000007F:    0xxxxxxx
U-00000080 – U-000007FF:    110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF:    1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF:    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF:    111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF:    1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

编辑:更清楚,D8B3是代码点1587的unicode十六进制表示。

答案 1 :(得分:1)

  

d8 b3表示55475十进制。

这是UTF-8中Unicode Character 'ARABIC LETTER SEEN'的正确编码。见here for a reference0xD8 0xB3 (d8b3)。当我使用你的代码并使用一个理解UTF-8而没有BOM的文本编辑器打开它时,我可以看到这个角色。十进制1587是字符以UTF-16或UTF-32编码时的值。