2013-04-05 5 views
2

누군가이 스 니펫이 다음 오류로 인해 왜 실패하는지 알려 줄 수 있습니까? 나는 또한 성공을 가진 from_to()를 부르기 전에 utf8::downgrade()를 시도했다. Perl 5.14.2 사용.Perl UTF8 - UTF16 변환 오류 - 와이드 문자

어떤 아이디어 ??

코드 :

use Encode qw(from_to); 
use HTML::Entities; 

$s = "มหั&#3624"; 
$foo = decode_entities($s); 
print "is foo UTF8? ", utf8::is_utf8($foo), "\n"; 
from_to($foo, 'UTF-8', 'UTF-16'); 

출력 : 모든

is foo UTF8? 1 
Cannot decode string with wide characters at /usr/lib/perl/5.14/Encode.pm line 194. 

답변

5

첫째, utf8::is_utf8 당신이 그것을하지 생각하지 않습니다. 문자열의 내부 저장소에 대한 세부 정보 (nothing you should ever need to check)를 제공합니다.

문제는 문자열이 UTF-8을 사용하여 인코딩되지 않는다는 것입니다. 그것은 전혀 부호화되지 않았습니다. decode_entities은 모두 유니 코드 코드 포인트의 문자열 인 디코딩 된 문자열을 받아서 반환합니다.

당신은 사용할 수

encode('UTF-16', decode_entities(decode('UTF-8', $foo)))