Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何在Perl中打印Hexagram?_Windows_Perl_Unicode_Utf 8 - Fatal编程技术网

Windows 如何在Perl中打印Hexagram?

Windows 如何在Perl中打印Hexagram?,windows,perl,unicode,utf-8,Windows,Perl,Unicode,Utf 8,我正在尝试用Perl打印第一个卦 下面的代码不会生成任何错误,但也不会打印任何卦 use warnings; use open ':encoding(utf8)'; binmode(STDOUT, ":utf8"); print "\x{4DC0}\n"; 我希望看到这个“䷀" 不是∑╖您告诉Perl您的终端需要UTF-8,但您的终端似乎需要以下选项之一:[1] 鉴于这些都是Windows代码页,我假定所讨论的终端是Windows控制台。如果是这样,您可以使用以下任一命令找出所

我正在尝试用Perl打印第一个卦

下面的代码不会生成任何错误,但也不会打印任何卦

use warnings;
use open ':encoding(utf8)';
binmode(STDOUT, ":utf8");

print "\x{4DC0}\n";

我希望看到这个“䷀" 不是∑╖您告诉Perl您的终端需要UTF-8,但您的终端似乎需要以下选项之一:[1]

鉴于这些都是Windows代码页,我假定所讨论的终端是Windows控制台。如果是这样,您可以使用以下任一命令找出所需的编码:

chcp

在编号前添加
cp
,以获得可用于编码模块的名称(由
:encoding
层使用)

但是,了解预期编码对您没有帮助。这些编码的字符集都不包含“䷀,因此您的终端无法显示䷀“没有变化

通过发出以下命令,可以将Windows控制台预期的编码切换为UTF-8:

chcp 65001
您可能需要调整控制台属性中的字体


  • 我使用以下程序获得了可能的编码列表:

    use strict;
    use warnings;
    use feature qw( say );
    use utf8;
    use Encode qw( decode encode_utf8 );
    
    my $output = encode_utf8("\x{4DC0}");
    my $displayed = "䷀";
    
    for my $encoding (Encode->encodings(":all")) {
       defined( my $got = eval { decode($encoding, $output, Encode::FB_CROAK|Encode::LEAVE_SRC) } )
          or next;
    
       say $encoding if $output eq $displayed;
    }
    
    (确保文件使用UTF-8编码。)


  • 它对我有效。你确定你的终端需要UTF-8吗?
    使用open
    调用是不必要的,因为你没有在该范围内打开任何句柄。或者,如果你将
    :std'
    作为
    使用open
    的参数添加到
    中,你不需要
    binmode
    调用。另外,无论哪种方式,你都应该传递
    :encoding(UTF-8)
    ,如
    :utf8
    :编码(utf8)
    参考Perl的内部编码层,通常不应在代码中使用。是的,我更改了代码页,这很有帮助。我现在得到了一个小的白色矩形,我想这是一个改进。你有没有在canvas Tk对象中尝试过这一点?这是为了达到这一目标而进行的测试。并不是所有的字符图示符都可用在所有字体中都是le。如果您在Widget上显式设置字体,您可能会更幸运。您确实正确这是一个Windows CMD窗口。我第一次尝试使用您的代码时发现:
    格式错误的UTF-8字符:\xc7\x22(意外的非连续字节0x22,紧跟在开始字节0xc7之后;需要2个字节,得到1)在PrintHexagram.pl第8行。格式错误的UTF-8字符(致命)在PrintHexagram.pl第8行。
    1)我发布的代码对您没有任何用处。您应该继续使用现有代码。2)您出现了错误,因为您没有按照指示使用UTF-8保存文件。chcp帮助了一些我必须在我的编辑器中找出如何使用UTF-8的方法。我知道它可以做到,但显然这是我第一次使用UTF-8我发布的ram需要使用UTF-8保存,因为它包含非ASCII字符,这也是使用
    use utf8;
    的原因。所有这些都与您无关。我只是将该程序包括在内以供将来参考。
    use strict;
    use warnings;
    use feature qw( say );
    use utf8;
    use Encode qw( decode encode_utf8 );
    
    my $output = encode_utf8("\x{4DC0}");
    my $displayed = "䷀";
    
    for my $encoding (Encode->encodings(":all")) {
       defined( my $got = eval { decode($encoding, $output, Encode::FB_CROAK|Encode::LEAVE_SRC) } )
          or next;
    
       say $encoding if $output eq $displayed;
    }