Ruby에서 Ruby-Feedparser를 사용해서 RSS1.0, RSS2.0, ATOM 형식의 feed들을 손쉽게
parsing할 수 있다. 그런데 Ruby-FeedParser의 내부에서는 모든 string을 UTF-8로 변환해서
리턴하게 된다.
textconverters.rb를 보면
- # Convert a text in inputenc to a text in UTF8
- # must take care of wrong input locales
- def toUTF8(inputenc)
- if inputenc.downcase != 'utf-8'
- # it is said it is not UTF-8. Ensure it is REALLY not UTF-8
- begin
- if self.unpack('U*').pack('U*') == self
- return self
- end
- rescue
- # do nothing
- end
- begin
- return self.unpack('C*').pack('U*')
- rescue
- return self #failsafe solution. but a dirty one :-)
- end
- else
- return self
- end
- end
이 부분에서 보면 iconv를 사용하지 않고 unpack, pack으로 인코딩을 처리하는데, 이게 한국어나
일본어에서는 깨져서 볼 수가 없게 된다. (iconv가 error-proof하지 않기 때문에 저렇게 처리했다고 한다.)
따라서 Ruby-Feedparser를 사용하는 경우에는 toUTF8 함수를 override해서 다음과 같이 변경해야,
인코딩을 제대로 처리할 수 있다.
- require 'feedparser'
- require 'iconv'
- class String
- def toUTF8(inputenc)
- if inputenc.downcase != 'utf-8'
- begin
- iconv = Iconv.new('UTF-8', inputenc) # iconv를 사용해서 UTF-8로 encoding 한다.
- return iconv.iconv(self)
- rescue
- return self #failsafe solution. but a dirty one :-)
- end
- else
- return self
- end
- end
- end



::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::