詳細は、以下のサイトがわかりやすいです。
http://space.geocities.jp/nequomame/java/mojibake/mojibake_01.html
「-」だけでなく他の文字でも同様の問題がおこることがあります。
urf-8の「-」には、見た目は一緒だけど二つ存在します。
そのうち一つは、sjisへの変換に失敗して、もう一つは成功します。
以下のような感じです。
[1] pry(main)> "FF0D".to_i(16).chr('utf-8') => "-" [2] pry(main)> "FF0D".to_i(16).chr('utf-8').encode("cp932") => "\x{817C}" [3] pry(main)> "2212".to_i(16).chr('utf-8') => "-" [4] pry(main)> "2212".to_i(16).chr('utf-8').encode("cp932") Encoding::UndefinedConversionError: U+2212 from UTF-8 to Windows-31J from (pry):4:in `encode'
なので、「-」が入る可能性がある文字列strに対して以下のように対処してみました。
str.gsub("2212".to_i(16).chr('utf-8'),"FF0D".to_i(16).chr('utf-8')).encode("cp932")
他のやり方もありそうな気がします。
0 件のコメント:
コメントを投稿