我正在扼杀我制作的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}/";
}
所有字符都打印不正确。这很奇怪,因为字符“ä”或“ø”或“ε”正确显示,但我无法设法使其他特定字符起作用,例如“ʃ”,“ɜ”,....
如果有人可以提供帮助,我真的很感激!!!
感谢阅读,
西蒙
答案 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'