![cmd.exe 中的 UTF-16 文件输出](https://linux22.com/image/1316229/cmd.exe%20%E4%B8%AD%E7%9A%84%20UTF-16%20%E6%96%87%E4%BB%B6%E8%BE%93%E5%87%BA.png)
chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"
好的,它创建了正确的文件,但内容中有问号而不是 unicode 字符。如何修复?
答案1
您的代码不正确,因为 10000 不是 Unicode 代码页。请参阅代码页标识符。
10000 macintosh MAC Roman; Western European (Mac)
...
1200 utf-16 Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
1201 unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications
...
12000 utf-32 Unicode UTF-32, little endian byte order; available only to managed applications
12001 utf-32BE Unicode UTF-32, big endian byte order; available only to managed applications
...
65000 utf-7 Unicode (UTF-7)
65001 utf-8 Unicode (UTF-8)
我不知道为什么,但是命令提示符在粘贴时似乎将它们解释为控制字符,特别是 SOH(标题开始,01)、STX(文本开始,02)和 ETX(文本结束,03)。
从好的方面来看,PowerShell 似乎可以正确处理这个问题。Notepad++ 自动将生成的文本文件打开为“UCS-2 Little Endian”,并显示正确的字符。
好的,我明白了为什么 UTF-8 对我来说不起作用。字体应设置为 Lucida Console,因为默认的 Raster Fonts 不支持 Unicode。
答案2
65001.txt
和都1200.txt
包含相同的字符串:абв™
但采用不同的编码。命令:
chcp 65001 & type 65001.txt
成功更改代码页,但显示乱码。
命令:
type 1200.txt
显示正确的字符,但命令
for /f %A in ('type 1200.txt') do echo %A
显示абвT
。
因此,cmd.exe 能够使用代码页 1200(有一些限制),而使用代码页 65001 我无法获得任何令人满意的结果。