2010-05-24 2 views
1

필자는 perl XML 라이브러리에 너무 익숙하지 않다. (사실, 나는 일반적으로 인코딩을 이해하는데 너무 빨랐다.) "à"과 같은 문자를 가지고 XML에 넣는 문자열을 사용했다. 파일을 열었을 때 파일을 열면 해당 문자가 포함 된 행에서 인코딩 오류가 발생합니다.어떻게하면 XML 문서에 넣을 수 있도록 Perl 문자열을 인코딩 할 수 있습니까?

그래서 문자열을 가져 와서 XML로 인코딩하는 간단한 방법이 필요합니다.

답변

4

XML에서 UTF-8 인코딩을 지정해야합니다. 예를 들면 다음과 같습니다.

UTF-8 and Unicode Standards에는 많은 유용한 정보가 있습니다.

Perl 프로그램은 출력 파일 핸들을 UTF-8 인코딩으로 설정해야 데이터를 올바르게 쓸 수 있습니다. 예를 들어 open에 대한 perl 문서를 참조하십시오.

유일한 XML 관련 이스케이프 처리는 XML 예약 문자입니다. Stackoverflow의 Where can I get a list of the XML document escape characters?을 참조하십시오.

당신은 XML의 표준 큰 망치입니다 LibXML를 사용하여 XML 특정 문자

+2

대답은 훨씬 더 될 수있다 : ① 조잡 하이퍼 텍스트 복사 ("여기", 빈혈 링크 텍스트를 사용). ② 잠재적으로 혼란스러운 정보 :'use utf8; '은 실제로 프로그래머가 Perl 소스 코드를 UTF-8로 인코딩했다는 것을 Perl에게 알려주는 경우에만 필요합니다. 이것은 질문에서 질문 된 인코딩을 사용하여 파일을 쓰는 것과는 다른 개념입니다. ③ 부정확 한 용어 : * 구분 기호 * (XML §4.6)에는 이스케이프 처리가 필요합니다. ④ 모듈에 퍼머 링크가없는 경우. – daxim

+2

나는 그 모든 것을 고쳤습니다. 나는 당신이 가장 큰 문제를 놓쳤다 고 생각한다 : XML을 직접 작성해서는 안되므로 이것을 생각할 필요가 없다. 모든 것을 할 수있는 모듈을 사용하십시오. :) 오, 조금 더 많은 담당자와 당신도 것들을 해결할 수 :) –

4

예를 탈출 펄의 XML::Code 또는 유사한 모듈을 사용할 수 있습니다. 경량은 아니지만 문제는 실제로 익숙한 못이고 적어도 코드 작성에 많은 시간을 소비하지는 않습니다.

use XML::LibXML(); 
XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($text)->toString; # returns properly encoded fragment 

파일에 쓰는 방법은 toFile을 참조하십시오.

1

나는 대답 2를 얻을 수 없었다. 이 시도는 "잘 형성되지 (유효하지 않은 토큰)"라는 XML을 생성합니다

#!/usr/bin/perl -wT 

use XML::LibXML; 
use HTML::Entities; 

binmode(STDOUT, ':utf8'); 
my $string = 'foo ä bar'; 
$string = decode_entities($string); 
print XML::LibXML::Document->new('1.0', 'UTF-8')->createTextNode($string)->toString(); 
관련 문제