如何读取perl中的特殊字符?

时间:2014-07-16 02:12:18

标签: perl encoding character-encoding

我有一个包含以下文字的文件:

 óó
 é
 ó
 óóó

我希望能够读取这些字符并在perl中操作它们。

事实上,我想使用诸如s /ó/ o / g之类的陈述;等等。

当我为具有上述文本的文件键入文件-i file.txt时,我得到的文件是“常规文件”。所以我认为这意味着我不需要特别注意在perl中处理这个文件。但是,只是阅读文件并吐出我读过的内容会给出问号。显然有些东西丢失了。

我在perl脚本的开头尝试了'use bytes',但这没有帮助。

我是如何在perl中读取此文件并以上述方式操作它的任何想法?

顺便说一下,该文件的xxd转储包含例如:

c3b3c3b30ac3a90ac3b30ac3b3c3b3c3b30ac3b30ac3b3c3b3c3b30ac3b3

如果有人需要恢复它使用的确切字符。

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的Perl以及在哪个平台或操作系统上?如果您在整个中使用unicode(您的终端或控制台字体,locale设置,文件编码等),这应该是简单的操作。)

我使用vim将上述文本复制到我在Xterminal中创建的文件中:

~/$ file -i utf8.txt
utf8.txt: text/plain; charset=utf-8
~$/ xxd  -p utf8.txttext
 c3b3c3b30ac3a90ac3b30ac3b3c3b3c3b30a
~/$ perl -npE 's/ó/o/g; s/é/ë/g' utf8.txt
 oo
 ë
 o
 ooo

我还使用xxd -r -p从上面包含的转储字符串创建文件(与您帖子中显示的不同)。结果是一样的:perl没有重音问题。

也许您的问题是由您环境的文本和编码设置引起的。如果您的locale设置,您用于终端的字体或文件的编码在某种程度上不一致,则最终可能会显示不正确的文字。

perlunicodeperldoc文档和教程perlunitut如果您想更全面地了解相关内容,请参阅必要的详细信息,但我建议您查看LOCALE }设置等开始。