正如@ikegami建议的那样,我将此报告为一个错误.
错误#121783 for perl5:Windows:cmd.exe中的UTF-8编码输出,代码页65001导致意外输出
考虑以下C和Perl程序,它们都在标准输出上输出字符串"αβγ"的UTF-8编码:
#include <stdio.h>
int main(void) {
/* UTF-8 encoded alpha, beta, gamma */
char x[] = { 0xce, 0xb1, 0xce, 0xb2, 0xce, 0xb3, 0x00 };
puts(x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
C:\…> chcp 65001 Active code page: 65001 C:\…> cttt.exe ???
C:\…> perl -e "print qq{\xce\xb1\xce\xb2\xce\xb3\n}"
???
?
据我所知,最后一个八位字节0xb3正在另一行输出,正在被翻译成另一行U+FFFD.
请注意,重定向输出会消除此效果.
我还可以验证它是重复的最后一个八位字节:
C:\…> perl -e "print qq{\xce\xb1\xce\xb2\xce\xb3xyz\n}"
???xyz
z
另一方面,syswrite避免了这个问题.
C:\…> perl -e "syswrite STDOUT, qq{\xce\xb1\xce\xb2\xce\xb3xyz\n}"
???xyz
我在Windows 8.1 …