Как напечатать гексаграмму в Perl? - PullRequest
3 голосов
/ 20 июня 2019

Я пытаюсь напечатать первую гексаграмму отсюда в Perl.

Приведенный ниже код не генерирует никаких ошибок, но также не печатает гексаграммы.

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

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

Я надеялся увидеть это "䷀", а не "Σ╖Ç".

1 Ответ

5 голосов
/ 20 июня 2019

Вы говорите Perl, что ваш терминал ожидает UTF-8, но ваш терминал ожидает одно из следующих действий: [1]

Поскольку это все кодовые страницы Windows, я предполагаю, что рассматриваемый терминал - это консоль Windows. Если это так, вы можете узнать, какая кодировка ожидается, используя одну из следующих команд:

chcp

& # x20;

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.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...