【发布时间】:2019-09-11 16:32:51
【问题描述】:
我正在尝试找出 c 中的宽字符。例如,我测试一个包含单个字母“Ē”的字符串,该字符串在 utf8 中编码为 c492。
char* T1 = "Ē";
//This is the resulting array { 0xc4, 0x92, 0x00 }
wchar_t* T2 = L"Ē";
//This is the resulting array { 0x00c4, 0x2019, 0x0000 }
我希望第二个数组是 {0xc492, 0x0000},但它包含一个额外的字符,在我看来只是浪费空间。谁能帮我理解这是怎么回事?
【问题讨论】:
-
源文件使用哪种编码方式保存?
-
如果有的话,我希望第二个数组是 {0x0112, 0x0000},即 utf-16 或 utf-32 编码。我不知道应该使用什么编码 { 0x00c4, 0x2019, 0x0000 }。
-
字符 0xC492 看起来像这样쒒
-
另外,请注意字符串文字是
const字符的数组。您的代码正在使用从字符串文字到指向字符的指针的不推荐转换。这曾经仅出于与 C 向后兼容的原因而工作,并在 C++11 中被删除。不要这样做。字符串文字的内容不得修改。让你的指针指向const个字符…… -
此外,这甚至可以编译的事实表明您必须使用古老的编译器。您可能想考虑升级...