ちょっと嵌ったので備忘録
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も例外出してくれればいいのになぁ。