2010-07-05 40 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