2010-07-05 3 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 문자"의 몇 가지 예를 들려 줄 수 있습니까? –

+0

UTF-8 문자열로 일부 바이너리 데이터가 포함될 수 있습니다. 나는 그것이 어떻게 지어지고 있는지에 대한 명령에 있지 않다. – codeholic

+0

0으로 시작하는 바이트는 유효한 UTF-8이지만 동시에 "바이너리 데이터"라고 할 수 있습니다 – Andrey

답변

2

어플 리케이션 코드의 깊은 곳에 어딘가에 스칼라가있는 Encode::_utf8_on이 있기 때문에 문제가 발생했습니다. 적절한 UTF-8 문자열.

+0

알아, 지금은 바보 같아. 이 질문을 삭제해야하는지 잘 모르겠습니다. – codeholic

+3

삭제하지 마십시오. 다른 사람들이 실수로 배우게하십시오. –

0

코어 인 코드 모듈은 Handling Malformed Data에 대한 기능을 제공합니다. 나는 결코 그들 자신을 사용하지 않았다.

+0

> 일부 인코딩은 CHECK 인수를 무시합니다. 예를 들어, Encode :: Unicode는 CHECK를 무시하고 오류가 발생할 때마다 항상 울립니다. : S – codeholic

1

Encoding::FixLatin을 통해 데이터를 파이핑 할 수 있습니다. 발생한 '바이너리'바이트가 실제로 라틴 -1 문자 인 경우 유효한 UTF8로 변환됩니다. 만약 그들이 정말로 무작위 바이너리 바이트라면, 적어도 무작위 (그러나 유효한) UTF8 문자들로 변환되어야합니다 :-)

+0

아마도 XML을 사용해야하지만 XML :: Simple 2.18은 그다지 좋아하지 않습니다. 라틴 -1 문자로 불행히도 충분하지 않습니다. – codeholic

관련 문제