【问题标题】:how to read special characters in perl?perl如何读取特殊字符?
【发布时间】:2014-07-16 11:18:56
【问题描述】:

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

 óó
 é
 ó
 óóó

我希望能够读取这些字符并在 perl 中对其进行操作。

其实我想用s/ó/o/g这样的语句;等等。

当我为具有上述文本的文件键入 file -i file.txt 时,我知道该文件是“常规文件”。所以我认为这意味着我不需要特别注意在 perl 中处理这个文件。但是,仅使用阅读文件并吐出我阅读的内容就会给出问号。很明显,有些东西不见了。

我在 perl 脚本的开头尝试了“使用字节”,但这没有帮助。

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

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

c3b3c3b30ac3a90ac3b30ac3b3c3b3c3b30ac3b30ac3b3c3b3c3b30ac3b3

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

【问题讨论】:

  • 提示:utf-8 可能会有所帮助(我不懂 Perl,所以你可能想查一下)

标签: perl encoding character-encoding


【解决方案1】:

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

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

~/$ 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 的口音没有问题。

也许您的问题是由于您的环境的文本和编码设置造成的。如果您的localesettings、您用于终端的字体或文件的编码在某些方面不一致,您最终可能会出现显示不正确的文本。

perlunicodeperldoc 文档和 perlunitut 教程会详细介绍必要的细节,如果您想更透彻地理解的话,但我建议您先检查 LOCALE 设置等。

【讨论】:

  • 谢谢。我需要做的是: open(F2, "<:encoding>
猜你喜欢
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2021-12-08
  • 2011-03-10
相关资源
最近更新 更多