![](/img/trans.png)
[英]Using UTF-8 Encoding (CHCP 65001) in Command Prompt / Windows Powershell (Windows 10)
[英]Windows UTF-8 printed with chcp 65001 - characters are mysteriously duplicated
这是我无法理解的一件事:
我正在使用Windows 7和Strawberry Perl 5.20,并且我想使用chcp 65001将UTF-8写入控制台(cmd.exe)。
UTF-8字符本身可以很好地显示,甚至> 255,但是某些角色有一个神秘的重复(仅当我不重定向到文件时才会发生)
编辑:我现在已经看到另一篇文章, 当我的perl-program-outputs-a-utf-8重复时,在最后一个八位字节处具有相同的问题-解决方案是注入binmode(STDOUT,'unix :encoding(utf8):crlf')进入perl程序-我已经测试过,现在可以正常工作
感谢所有研究这个奇怪问题的人。
简而言之,当我重定向到平面文件然后打印时,我正在编写UTF-8字符串(chr(300)x 3).chr(301)。“ UVW \\ x {0D} \\ x {0A}”平面文件,一切都很好。
但是,当我直接打印到控制台时,有些字符被神秘地复制了(我在单独一行中谈论的是“ VW”字符),我不知道为什么
这是我的测试输出
Page de codes active : 65001
Redirected into a file:
-----------------------
ĬĬĬĭUVW
Printed directly:
-----------------
ĬĬĬĭUVW
VW
IO-Layers = (unix crlf)
C4ACC4ACC4ACC4AD5556570D0A
这是我的测试程序:
@echo off
chcp 65001
echo.
set H1=BEGIN{binmode(*STDIN); undef $/;
set HEXDUMP="%H1% print uc(unpack('H*',<STDIN>)), qq{\n}}"
set L1=my @l = PerlIO::get_layers(*STDOUT, output, 1);
set LAYERS="%L1% print {*STDERR} qq{IO-Layers = (@l)\n};"
set PROG="print chr(300) x 3, chr(301), qq{UVW\n};";
set TFILE=%TEMP%\tfile.txt
echo Redirected into a file:
echo -----------------------
perl -C6 -e%PROG% >%TFILE% && type %TFILE%
echo.
echo Printed directly:
echo -----------------
perl -C6 -e%PROG%
echo.
perl -e%LAYERS%
echo.
perl -e%HEXDUMP% <%TFILE%
echo.
pause
就像我说的那样,字符本身是正确打印的,但是为什么会有这种神秘的重复呢? ...以及为什么*仅*(如果未重定向到文件中)?
如我所怀疑,这被报告为Windows软件失败:
这是由Windows中的错误引起的。 当写入设置为代码页65001的控制台时,WriteFile()返回写入的字符数,而不是字节数。
我不知道有一种解决方法,但是如果:unix:encoding(utf8):crlf
crlf PerlIO堆栈为您工作,那么看来您已经找到了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.