为什么perl不能显示所有类型的UTF8字符

use*_*552 2 perl encoding utf-8 ipa

我正在扼杀我制作的perl脚本,它应该处理IPA字符(国际音标).我使用UTF8编码,我的perl文件和std输入/输出如下:

#!/usr/local/bin/perl
use utf8;

binmode(STDOUT, ":utf8");          #treat as if it is UTF-8
binmode(STDIN, ":encoding(utf8)"); #actually check if it is UTF-8
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个小测试时:

my %IPAchar = (
    "69"  => "i",    "65"  => "e",    "25b" => "?",    ""    => "??",
    ""    => "œ?",    "153" => "œ",    "259" => "?",    "f8"  => "ø",
    "79"  => "y",    "75"  => "u",    "6f"  => "o",    "254" => "?",
    ""    => "??",    "e3"  => "??",    "251" => "?",    "61"  => "a",
    "6a"  => "j",    "265" => "?",    "77"  => "w",    "6e"  => "n",
    "272" => "?",    "14b" => "?",    "261" => "?",    "6b"  => "k",
    "6d"  => "m",    "62"  => "b",    "70"  => "p",    "76"  => "v",
    "66"  => "f",    "64"  => "d",    "74"  => "t",    "292" => "?",
    "283" => "?",    "7a"  => "z",    "73"  => "s",    "281" => "?",
    "6c"  => "l",    ""    => "h",    "294" => "?",    "2e"  => ".",
    "280" => "?",    "1dd" => "?",    "72"  => "r",    "3b5" => "?",
    "67"  => "g",    "25c" => "?",    "2d0" => "?",    "2c8" => "?",
    "2b0" => "?",    "26a" => "?"
);

foreach my $k ( sort keys(%IPAchar) ) {
    print "\n[$k] /$IPAchar{$k}/";
}
Run Code Online (Sandbox Code Playgroud)

所有字符都打印不正确.这很奇怪,因为字符"ä"或"ø"或"ε"正确显示,但我无法设法使其他特定字符工作,例如"ʃ","ɜ",....

如果有人可以帮助我真的很感激!!!

谢谢阅读,

西蒙

Bor*_*din 6

您是在控制台上还是在编辑器中查看程序的输出?

即使您的程序为您想要的符号生成正确的字符代码,您也必须使用支持这些符号的字体来显示文本; 否则显示器没有意义.

使用浏览器打开文本文件会很有用,因为Web浏览器必须适应几乎任何官方编码,并且通常能够正确地呈现文件的内容.

快速搜索找到了支持IP符号的字体列表.如果您使用其中一个,那么您应该能够正确地看到您的输出.

我强烈推荐GNU Unifont,它具有我所知道的任何字体的Unicode字符集的最佳覆盖范围.它是一种无衬线字体.


更新

它让我担心你的%IPAchar哈希定义有多个键设置为null字符串"".它是一个完全有效的散列键,但散列的本质意味着你只能有一个元素作为键.正式地说,$IPAchar{''}在这种情况下,哈希元素的值是未定义的.实际上,它将被设置为列表中具有相同键的最后一个值,因此在您的情况下$IPAchar{''} = 'h'.