相关疑难解决方法(0)

当我的Perl程序在cmd.exe中输出UTF-8编码的字符串时,为什么我会重复最后一个八位字节?

更新

正如@ikegami建议的那样,我将此报告为一个错误.

错误#121783 for perl5:Windows:cmd.exe中的UTF-8编码输出,代码页65001导致意外输出

考虑以下C和Perl程序,它们都在标准输出上输出字符串"αβγ"的UTF-8编码:

C版:

#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
???

Perl版本:

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 …

c windows perl utf-8

19
推荐指数
1
解决办法
509
查看次数

标签 统计

c ×1

perl ×1

utf-8 ×1

windows ×1