NokogiriでXMLパースするときにはencodingに気をつけろ!

ちょっと嵌ったので備忘録

Nokogiri::XML(string)

でファイルから読み込んだXML文字列をパースしていたんだけど、どうも途中で尻切れになってしまって最後まで読み込めなかった。早速疑ったのはencodingだったけど、ズバリそうでした。
xmlの冒頭に

<?xml version="1.0" encoding="Shift-JIS"?>

なんてなっている場合は以下のようにエンコード指定しないとうまくいかない。
本当はうまく行くはずなんだけど、今回はSJISには存在しない全角マイナスが含まれていた。
どうやらWindowsユーザーは俺のコードはSJISだ!と勘違いしてるようである。
Windows3.1以降の文字コードはCP932である。

Nokogiri::XML(xml, nil, 'CP932')

ってことで明示的にエンコードを指定して解決したけど、Nokogiriも例外出してくれればいいのになぁ。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.