見た目が一緒なUTF-8な文字列がなぜか一致しなかったお話
躓いたのでめも。
とあるcsvファイルのあるカラムと、DBにあるテーブルのあるカラム(文字列)が一致していたら、
テーブルのidをとってきてほげほげっていうコードをrubyでかいてた。
hoge.csvの中身
hoge_id,title,hoge,hoge2,hoge3
10,あばばば,あば,あばばば,あばばばば
…
DBのテーブル
id,title,piyo,piyopiyo,piyoyoyo
1,あばばば,aba,ababbababa,ほげほげ
…
みたいな(雑だけど
で、titleの部分を一致させたいんだけど、
どう見ても一致するとこが一致しない。
謎におもって、コマンドプロンプトにその文字列はっつけたら
片方は「あばばば」って表示されたんだけど、
もう片方は(csvのほう)は「あは<3099>は<3099>は<3099>」(´・ω・`)
この<3099>ってのは、
unicodeの正規化の方式でNFD方式らしい。
http://q.hatena.ne.jp/1246722275
utf-8だったらなんでもいいってわけじゃないのね(´・ω・`)
で、治す。
教えてもらったpythonばーじょん。
import codecs import unicodedata import sys f = codecs.open(sys.argv[1], "r", "utf-8") unistr = f.read() print unicodedata.normalize('NFKC', unistr).encode("utf-8") f.close
rubyはhttp://sho.tdiary.net/20110204.htmlを参考にするといいみたい。
いまrubyでかいてるからruby版もやってみよう。
おしえてもらったこれすげーー
http://homepage1.nifty.com/nomenclator/unicode/normalization.htm