@kyanny's blog

My thoughts, my life. Views/opinions are my own.

UTF-8 の範囲外の文字かどうか、どうやって判別したらいいのだろう

すごく大きな UTF-8 でかかれたテキストファイルがあり、その中にごく一部だけ '????' とか文字化けしているものがあり、文字化けを含む行だけ抜き出したいのだけど、 Perl で(他の言語でも) どうやればいいのかわからない。

Encode とかでできるのだろうか・・・。困った。目視で探すのは嫌だなぁ。。

UTF-8 の文字にマッチする正規表現 このあたりをみてちょっとやってみているけど、範囲外としてひっかからないような・・・。

MySQL 5 以上で、 UNIQUE 制約のついたカラムに、エディタで開いたときに '????' とかなるような UTF-8 文字列としてちゃんとしてない?化けてる文字を入れようとすると、範囲外の化けてる部分だけ勝手に削って入れてしまう。それで、次に別のレコードを INSERT するときに、同じように削られた部分が削られて、残った部分が他のレコードと重複している場合に Duplicate エラーがでて INSERT できない。この、 INSERT できないレコードがどれなのかを特定するために、どれが文字化けしているのかを知りたい。 MySQL が削るのは UTF-8 の範囲外の文字だから、そういう文字を含む行を取り出したい。ので上記のように考えてやってみた、けど、これがそもそも違うのだろうか・・・。