1

当我使用此代码在 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);
4

2 回答 2

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 十六进制表示。

于 2013-07-08T13:15:43.523 回答
1

d8 b3 表示十进制的 55475。

Unicode Character 'ARABIC LETTER SEEN'这是UTF-8 中的正确编码。请参阅此处作为参考0xD8 0xB3 (d8b3). 当我使用您的代码并使用可以理解 UTF-8 而没有 BOM 的文本编辑器打开它时,我可以看到该字符。1587十进制,是字符以 UTF-16 或 UTF-32 编码时的值。

于 2013-07-08T13:17:36.870 回答