julia で UnicodeDecodeError の文字を一気に処理する方法 (オマケ、数字とアルファペットの駆逐方法)
UnicodeDecodeError の出る "helllo \x84 world \xe3 こんにちは" の \x84 だとか、\xe3, \x83 みたいなやつを一挙に駆逐する方法です。
StefanKarpinski さんが、Purging utf-8 bad characters というところで、
julia> filter(isascii, "H∃llø, woℝld.") "Hll, wold."
というのを書き込んでいらっしゃいました。isascii() を使うと日本語のほとんどが駆逐されます。
julia> filter(isascii, "helllo \x84 world \xe3 こんにちは (^ ^)") "helllo world (^ ^)"
文字列 の解説によると、julia では
全ての整数値が有効なUnicodeコードポイントではありません。しかしパフォーマンスの為に、Juliaは Char() の呼び出しの際に 引数が有効なUnicodeコードポイントであるかをチェックしません。 もし変換された値が有効なコードポイントであるか確認したい場合は、 isvalid() 関数を使用してください。:
とのことです。この isvalid() 関数を使うと一気に駆逐できます。
julia> filter(isvalid, ("helllo \x84 world \xe3 こんにちは (^ ^)")) "helllo world こんにちは (^ ^)"
と、いうことは、!isascii() を使ったら、数字とか、アルファベットを駆逐できるのです。
julia> filter(!isascii, filter(isvalid, ("helllo \x84 world \xe3 こんにちは (^ ^)"))) "こんにちは"
これは、やりすぎかな?
isnumeric() というのを使うと数字が除けます。
julia> filter(!isnumeric, "hello \x84 world \xe3 こんにち8 (^ ^)") "hello \x84 world \xe3 こんにち (^ ^)"
漢字と平仮名だけ取り出したい人達には絶好の道具ですね。
でも絵文字は駆逐できません。絵文字の駆逐には、python の emoji のお世話になるのが良いでしょう。