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

时间:2014-10-13 16:55:12

标签: perl encoding utf-8 ipa

我正在扼杀我制作的perl脚本,它应该处理IPA字符(International Phonetic Alphabet)。 我使用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

然而,当我运行这个小测试时:

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}/";
}

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

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

感谢阅读,

西蒙

2 个答案:

答案 0 :(得分:6)

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

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

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

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

我强烈推荐GNU Unifont,它涵盖了我所知道的任何字体的Unicode字符集。它是一种无衬线字体。


<强>更新

我担心您对%IPAchar哈希的定义有多个键设置为 null empty 字符串""。它是一个非常有效的散列键,但散列的本质意味着你可以只使用一个元素作为键。正式地说,在这种情况下,哈希元素$IPAchar{''}的值是未定义的。实际上,它将设置为列表中具有相同键的 last 值,因此在您的情况下$IPAchar{''} = 'h'

答案 1 :(得分:0)

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

如果您还没有,请安装Cygwin附带的X11。有关详细信息,请参阅Cygwin / X用户指南http://x.cygwin.com/docs/ug/cygwin-x-ug.html。选择其他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'