2010-07-05 139 views
1

当我将一些标量数据放入XML :: Simple或Data :: Dumper时,出现'格式错误的UTF-8字符'错误。在发生错误的行上有正则表达式。Perl中正则表达式中格式错误的UTF-8字符错误

Malformed UTF-8 character (fatal) at /usr/share/perl5/XML/Simple.pm line 1690. 
Malformed UTF-8 character (fatal) at /usr/lib/perl/5.10/Data/Dumper.pm line 682. 

此刻,我没有用一小段代码重现错误。

XML::Simple 2.18 
Data::Dumper 2.124 
perl v5.10.1 
+4

你是指无效的UTF-8字符是什么意思?你是指无效的代码点,无效的UTF-8字节序列或其他?你能举出一些你想删除的“无效的UTF-8字符”的例子吗? – 2010-07-05 20:40:19

+0

它是一个UTF-8字符串,它可能偶尔包含一些二进制数据。我没有掌握它的构建方式。 – codeholic 2010-07-05 20:47:49

+0

以0开头的任何字节都是有效的UTF-8,但同时可以称为“二进制数据” – Andrey 2010-07-05 21:02:08

回答

2

问题出现了,因为在应用程序的代码深处有一个标量为Encode::_utf8_on,那wasn '一个正确的UTF-8字符串。

+0

我知道,现在听起来很愚蠢。我不确定是否应该删除此问题。 – codeholic 2010-07-09 15:36:37

+3

不要删除它,让别人从你的错误中学习。 – 2010-07-09 15:46:53

0

核心编码模块为Handling Malformed Data提供设施。不过,我从来没有用过它们。

+0

>一些编码忽略CHECK参数。例如,Encode :: Unicode会忽略CHECK,并且它总是出错。 :S – codeholic 2010-07-05 20:53:30

1

您可以尝试通过Encoding::FixLatin管道您的数据。如果你遇到的'binary'字节实际上是Latin-1字符,那么它们将被转换为有效的UTF8。如果他们真的是随机二进制字节,那么他们应该至少转换为随机(但有效)的UTF8字符:-)

+0

也许他们应该,但XML ::简单的2.18不喜欢他们:)不幸的是,拉丁-1字符是不够的。 – codeholic 2010-07-05 21:15:14