如何在Perl中打印Hexagram?

时间:2019-06-20 19:39:13

标签: windows perl unicode utf-8

我正在尝试在Perl中打印第一个卦from here

下面的代码不会产生任何错误,但是也不会打印任何六边形。

added_more_notification_channels

我希望看到这个“䷀”而不是“Σ╖Ç”。

1 个答案:

答案 0 :(得分:5)

您告诉Perl您的终端使用的是UTF-8,但是您的终端似乎使用了以下其中一种: [1]

由于这些都是Windows代码页,因此我认为所涉及的终端是Windows控制台。如果是这样,您可以使用以下任一命令找出所需的编码方式:

chcp

perl -le"use Win32; print Win32::GetACP()"

cp前面加上数字,以获得可以与“编码”模块(:encoding层使用)一起使用的名称。

但是,知道期望的编码不会帮助您。这些编码的字符集均不包含“䷀”,因此您的终端无法显示“䷀”而无需更改。

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

chcp 65001

您可能必须在控制台的属性中调整字体。


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

    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编码。)