我正在使用EVC ++ 4开发的应用程序在Windows CE 5上运行并且应该支持unicode(AFAIK wchar_t在Windows上使用UTF-16,所以我正在使用它),所以我希望能够用“更奇特的“人物。特别是对于在UTF-16中使用4字节但不仅仅是2的字符。因此我试图在texteditor中显示这些字符(在我的桌面PC上使用Windows XP,而不是在嵌入式设备上)。
但我还没有成功这样做。作为一个例子,我选择了this character。 如提到here“MPH 2B Damase”应该支持这个角色。所以我下载了字体并将其放入Windows \ Fonts。我使用hexeditor创建了一个文本文件(只是为了确定),内容如下:
FFFE D802 DC00
当我用记事本打开它时(应该是unicode能力的,对吗?)并使用下载的字体,它不会按预期显示1个字符,但是这个2:
˘Ü
我做错了什么? :)
谢谢!
hrniels
修改: 如建议的那样翻转BOM不起作用。记事本(以及我尝试的所有其他编辑器)在这种情况下显示两个方块。有趣的是,如果我在这里复制两个方块(使用firefox),我会看到正确的字符:
我也用Komodo Edit尝试了同样的结果。
使用UTF-8也无法帮助记事本。
答案 0 :(得分:1)
您的文字编辑器可能不喜欢UTF-16。它可能假设ANSI或UTF-8。
请尝试输入等效的UTF-8:
0xF0 0x90 0xA0 0x80
这对您的测试没有帮助,但会确保您的字体没有错误。支持UTF-16的文本编辑器是Komodo Edit。
答案 1 :(得分:1)
如果您将字节顺序标记反过来会发生什么?
FEFF D802 DC00
(目前字节序列被解释为两个字符U + 02D8 U + 00DC,因此希望翻转BOM将导致按预期顺序读取字节)
答案 2 :(得分:1)
您可能忘了阅读_wfopen()
文档。他们在那里指定编码参数。顺便说一句,我以为你已经在使用Unicode(wchars)了。
我建议您在包含或不包含BOM的文件中使用UTF-8,但强制您的fopen使用UTF-8标志。看起来_wfopen("newfile.txt", "r, ccs=UTF-8");
适用于带或不带BOM的UTF-8以及UTF-16。不要错误地使用ccs=Unicode
,拥有没有BOM的UTF-8文件是很常见的。
在尝试工作之前,您应该先阅读一些关于Unicode的内容。这是一个非常好的投资 - 如果您了解Unicode的工作原理,它将为您节省时间。
这是一个开始http://blog.i18n.ro/newbie-guide-to-unicode/,不要忘记阅读文章末尾的链接。
如果您确实需要一个允许您使用Unicode编码的简单文本编辑器,请使用Notepad++并忘记记事本。