PERL中未知的UTF-8字符

时间:2014-04-23 08:50:29

标签: regex perl unicode perl-module

我想从perl

中的文本文件中读取字符串

我以前读过的方法是:

my $indPara = "C:\\Users\\Admin001\\Desktop\\paraText.txt";
open(INDPARA, $indPara) || die "Indesign paraText not found on location!";
my $indesignPara = <INDPARA>;
close INDPARA;

阅读文字时,我会在文字开头找到一个未知的unicode字符(&#65279&#xFEFF),

从下面的链接下载我以前阅读的文本文件

https://mega.co.nz/#!r1pAyAhA!VSnL2tbPWoTtThcCRoiogSxK4ok_0YvZSczs054w0uU

我使用的是Komodo IDE 8.5和perl 5.16.3

请提出一些想法来克服这个问题

提前致谢

VIMAL

3 个答案:

答案 0 :(得分:2)

你所拥有的是BOM。它告诉你,你拥有的不是UTF-8文件,它是UTF-16(BE)文件。

BOM不是文件中数据的一部分,因此您可以安全地跳过它并继续读取超出它的数据。但是,您不应将从文件中读取的数据视为UTF-8,应将其视为UTF-16(BE)和decode it

答案 1 :(得分:2)

如果你有整个字符串($indesignPara),请执行:

$s = decode("UTF-16LE", $s, Encode::FB_QUIET);

但我不确定<INDPARA>是否有效。您可以尝试"<:encoding(UTF-16LE)"作为第一个额外参数来打开。然后去掉第一个宽字符,即物料清单U + FFFE。

答案 2 :(得分:-1)

非常感谢你们的帮助和想法,我找到了解决这个问题的方法,即:找到并替换这个s/\x{feff}//g;并且它有效!