Articles of utf 16

wchar_t在Linux上的UTF-16?

在Linux上使用wchar_t*来存储UTF-16编码文本是否有意义? 显而易见的问题是,Linux上的wchar_t是四个字节,UTF-16每个字符通常需要两个(或者两个两个一组两个)字节。 我正在尝试使用第三方库,确实如此,这似乎很混乱。 看起来事情是搞砸了,因为在Windows上wchar_t是两个字节,但我只是想仔细检查,因为这是一个非常昂贵的商业图书馆,可能是我只是不明白的东西。

UTF-16转换为UTF-8(用于Windows中的脚本)

将UTF-16文件转换为UTF-8的最佳方法是什么? 我需要在cmd脚本中使用它。

Python 2.7中特定于平台的Unicode语义

Ubuntu 11.10: $ python Python 2.7.2+ (default, Oct 4 2011, 20:03:08) [GCC 4.6.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> x = u'\U0001f44d' >>> len(x) 1 >>> ord(x[0]) 128077 Windows 7的: Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or […]

如何最好地处理Windows的16位wchar_t丑陋?

我正在编写一个与mingw一起使用的包装器层,它为应用程序提供了一个虚拟的UTF-8环境。 处理文件名的函数是从UTF-8转换并调用相应的“_w”函数的包装器,依此类推。 我碰到的大问题是Windows的wchar_t是16位。 对于文件系统操作,这不是什么大不了的事情。 我可以在UTF-8和UTF-16之间来回转换,而且一切都可以正常工作。 但标准的C多字节/宽字符转换API不允许多个wchar_t字符。 可能的解决scheme: 提供一个CESU-8环境而不是UTF-8。 我真的不喜欢这个。 采取简单的方法,只支持BMP。 将长度为4的UTF-8序列视为无效。 扩展包装器,用typedef int32_t wchar_t;replacemingw的wchar_t typedef int32_t wchar_t; 处理WCHAR和wchar_t是不一样的。 这是一个痛苦,但它可能是理想的移植应用程序,期望一个干净的POSIXtypes的环境,不要使用wchar_t任何Windows API的目的。 下面的黑客: 在读取4字节UTF-8字符的前3个字节后, mbrtowc输出对应于高代理的wchar_t ,并将剩余状态保留在mbstate_t对象中。 接收到下一个字节后,将其与保存状态结合,输出低位代理。 如果最后一个字节无效,则返回-1(带有EILSEQ),并且一个单独的代理会在输出stream(坏…)中结束。 wcrtomb在处理高代理时输出UTF-8的前2个字节,并将剩余状态保存在其mbstate_t对象中。 当它随后处理低代理项时,将它与保存的状态结合起来输出UTF-8的最后2个字节。 如果没有收到一个有效的低代理项,它将返回-1(带有EILSEQ),并且一个不完整的UTF-8序列在输出stream(坏…)中结束。 这种攻击的好处在于,只要input有效,它就可以工作,并允许访问任何UTF-8字符,因此可以访问任何可能的文件名/参数等。 文本应用程序可能需要处理。 缺点是它不完全符合ISO C( wchar_tstring不允许为有状态),并且延迟了错误字符的检测,直到错误的部分输出已被写入。 我正在寻求不同选项的反馈意见,特别是我提出的黑客攻击:是否合理,缺点是否可能导致严重错误,以及是否还有其他缺点,我还没有考虑哪些可能使计划完全工作。 我也很高兴听到任何其他可能的解决scheme,我没有想到。

UTF-16 perlinput输出

我正在编写一个脚本,它以UTF-16编码的文本文件作为input,并输出一个UTF-16编码的文本文件。 use open "encoding(UTF-16)"; open INPUT, "< input.txt" or die "cannot open > input.txt: $!\n"; open(OUTPUT,"> output.txt"); while(<INPUT>) { print OUTPUT "$_\n" } 我们只是说我的程序将input.txt中的所有内容写入output.txt。 在我的cygwin环境中,这个工作非常好,它使用“This is perl 5,version 14,subversion 2(v5.14.2)for cygwin-thread-multi-64int” 但在我的Windows环境下,使用“这是为MSWin32-x64-multi-thread构build的perl 5,版本12,subversion 3(v5.12.3)”, output.txt中的每一行除了第一行之外都预先包含疯狂的符号。 例如: <FIRST LINE OF TEXT> ਀ ㈀ ㄀Ⰰ ㈀Ⰰ 嘀愀 ㌀ 䌀栀椀愀 䐀⸀⸀⸀ 儀甀愀渀最 䠀ഊ<SECOND LINE OF TEXT> … 任何人都可以提供一些见解,为什么它在cygwin,但不是Windows的作品? […]

Python UTF-16输出和Windows行结尾的错误?

有了这个代码: test.py import sys import codecs sys.stdout = codecs.getwriter('utf-16')(sys.stdout) print "test1" print "test2" 然后我运行它: test.py > test.txt 在Windows 2000上的Python 2.6中,我发现换行字符正在输出为字节序列\x0D\x0A\x00 ,这对于UTF-16来说当然是错误的。 我错过了什么,或者这是一个错误?