Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
为什么perl不能显示所有类型的UTF8字符_Perl_Encoding_Utf 8_Ipa - Fatal编程技术网

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

为什么perl不能显示所有类型的UTF8字符,perl,encoding,utf-8,ipa,Perl,Encoding,Utf 8,Ipa,我正在绞尽脑汁编写一个perl脚本,它应该能够处理IPA字符(国际拼音字母)。 对于我的perl文件和std in/out,我使用UTF8编码,如下所示: #!/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 但是,当我运行这个小测试

我正在绞尽脑汁编写一个perl脚本,它应该能够处理IPA字符(国际拼音字母)。 对于我的perl文件和std in/out,我使用UTF8编码,如下所示:

#!/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
但是,当我运行这个小测试时:

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}/";
}
没有正确打印所有字符。这很奇怪,因为字符“ä”或“ø”或“ε”显示正确,但我无法使其他特定字符正常工作,例如“ʃ”、“ɜ”

如果有人能帮助我,我真的会非常感激

谢谢你的阅读


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

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

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

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

我强烈推荐,在我所知道的任何字体中,它对Unicode字符集的覆盖率最好。这是一种无衬线字体


更新


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

我只是确认它工作正常。以下是在Cygwin上设置GNU Unicode的方法:

如果尚未安装,请安装Cygwin附带的X11。有关详细信息,请参阅Cygwin/X用户指南。选择其他X11实用程序时,请确保从类别X11添加mkfontdir和xset

决定放置GNU unifont的目录。我为以下内容选择了~/X11/font

cp unifont.pcf.gz ~/X11/font/unifont.pcf.gz
mkfontdir ~/X11/font
如果尚未运行,请启动X服务器,例如使用startxwin

export DISPLAY=:0
xset +fp ~/X11/font
xterm -fn '-gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1'

+1用于拼写“怪异”,无错误倾向:
my%IPAchar=map{$\=>chr(hex($\))}qw(69 65 25b我不认为它是未定义的。它可能有文档记录,也可能没有文档记录,但许多代码(例如,
%h=(%h,@extras);
)依赖于当前的行为。。还有太多的汉字了@池上:我明白你的意思,改变这种行为的将是一个勇敢的灵魂,但“未记录”是没有定义的。我想不出更好的定义了,除了一些被记录为“未定义”的东西,这是我们允许自己的一种奇怪的放纵。未定义的行为意味着它可以做任何事情,包括抛出错误。未记录意味着它不在文档中。它们的意思不一样。至于汉字,它们根本不适合计算机字符集,但我不会让它们有任何其他方式!