【发布时间】:2013-07-05 19:15:15
【问题描述】:
当我使用此代码在 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);
【问题讨论】:
-
wchar_t wc = L"س";甚至不会编译(带双引号)。你能展示你使用的真实代码吗(包括你如何写入文件)? -
哦,对不起,你是对的。谢谢你。在我的代码中是
L'س'。 -
@JesseGood 我添加了真实代码
-
cout << wc不会给您期望的结果。它会将输入拆分为 8 位字符,然后打印。您需要使用 wcout。wcout << int(wc)有什么价值? -
@Zaphod:这是不正确的。当您将
wchar_t类型传递给std::cout时,它会打印十进制值(作为整数)。