글
IT/Perl 2008. 11. 12. 16:01[ Perl ] Unicode 실체참조코드 문제 - HTML Entity 인코딩관련
흠.. 적절한 네이밍 센스를 발휘를 못하겠군요.
가끔 웹 페이지에서 뭘 긁어와서 슥샥처리할 때 가끔 당혹스러운 사건을 당하고는 합니다.
대표적인 게, Encode 관련해서 2바이트 문자가 와장창 깨져버리는 참혹한 현실이고, 근래 몇 번 겪었던 HTML Entity 인코딩으로 해당 텍스트 전체가 깨져버리는 건데요.
Encode 는 Perl 로 2바이트 문자를 취급할 때 쯤 되면, 간단한 법칙만 알고 있으면 쉽게 해결할 수 있는 문제죠. 후자의 경우에는 어케저케 Google 선생님을 통해서 해결은 가능합니다. 근데 어떤 키워드로 검색하느냐가 문제겠죠.
그래서 오늘 좀 뜨끔한 부분이라서 메모용으로 블로깅합니다.
대상은 펄매니아의 RSS 파일입니다.
- http://www.perlmania.or.kr/rss/perlmania.xml
브라우저에서는 이렇게 제대로 나옵니다. 뭐가 문제냐 이거죠.
그래서 Perl 코드를 써서 문제가 되는 title 만 찍어봤습니다.
use strict;
use warnings;
use XML::FeedPP;
my $feed = XML::FeedPP->new('http://www.perlmania.or.kr/rss/perlmania.xml');
foreach my $entry ($feed->get_item()) {
print $entry->title."\n";
}
use warnings;
use XML::FeedPP;
my $feed = XML::FeedPP->new('http://www.perlmania.or.kr/rss/perlmania.xml');
foreach my $entry ($feed->get_item()) {
print $entry->title."\n";
}
사실 위의 브라우저 화면에서 뭐가 문제인지는 말해주고 있습니다.
- PERLMANIA IS NOW SUFFERING FROM THE ENCODING CHANGE OF XML::RSS!!
라고 말이죠.
즉 저 RSS 를 만들어내기 위해 사용한 XML::RSS 라는 모듈 자체에서 제대로 인코딩을 변경하지 못해서 발생한 문제입니다.
이걸 원래부터가 글러먹었는데, 그걸 어떻게 처리하느냐 라고 맘편하게 생각하면 별 문제없습니다. 저도 그럴려고 했다가, 엘리트 Perl 프로그래머이신 song@#perl-kr 님께 물어보니 딱 하고 바로 답이 나왔습니다.
HTML::Entities 로 decode 하면 끝!
이라고 말이죠.
그래서...
use strict;
use warnings;
use XML::FeedPP;
use HTML::Entities; # +
binmode(STDOUT, ':utf8'); # +
use warnings;
use XML::FeedPP;
use HTML::Entities; # +
binmode(STDOUT, ':utf8'); # +
my $feed = XML::FeedPP->new('http://www.perlmania.or.kr/rss/perlmania.xml');
foreach my $entry ($feed->get_item()) {
print decode_entities($entry->title)."\n"; # *
}
foreach my $entry ($feed->get_item()) {
print decode_entities($entry->title)."\n"; # *
}
오오~ 과연! 결과는 이렇게 제대로 나오더라는 것이죠.
사실 몇몇 XML 관련 모듈에서 이런 경우를 당한 적이 여러번 있었습니다만.. 그때는 어떻게 넘어갔는 지 모르겠군요; 아무튼 이와 관련된 처리를 Google 에서 검색하면.. (song 님께서 대신 해주셔서...)
일본의 Perl Mongers 들의 여러가지 해결방안을 볼 수 있습니다. 스펙을 알고 있다면야, 금방 답이 나오는 것이겠죠?
아무튼 덩달아서 XML::FeedPP 를 통해서 XML/RSS 를 손쉽게 주물럭 거릴 수 있습니다.
요즘 Perl 을 쭈욱 만질 일이 뜸해진 터라... 이것저것 헤매는 일이 많아지고 있습니다. (PHP 에서 my 를 항상 쓰고 있다던가, PHP 하다가 Perl 에 와서는 my 를 계속 빼먹는 다던가...)
아아.. 다언어주의... 꿈같은 이야기군요...
'IT > Perl' 카테고리의 다른 글
[ Perl ] Pod::HTML, POD 문서를 HTML 로 ... (4) | 2008.11.26 |
---|---|
[ Perl ] Unicode 실체참조코드 문제 - HTML Entity 인코딩관련 (0) | 2008.11.12 |
[ Perl ] Expect 를 이용해서 자동화하기 (2) | 2008.10.22 |
[ TWOA ] The Way Of Approaching 후기(라는 것은 또 훼이크!) (2) | 2008.09.24 |
RECENT COMMENT