![](/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.