【Ruby】文字列から \u0000 などの制御文字を取り除く
2022/03/01
制御文字についての説明は割愛するが、ここに制御文字が含まれた string という変数がある
pry(main)> string = "\u0000制御文字が\u001f除外されている\u007f"
#=> "\u0000制御文字が\u001F除外されている\u007F"
puts で出力すると何も見えないが、p で出力すると見える
pry(main)> puts string
制御文字が除外されている
#=> nil
pry(main)> p string
"\u0000制御文字が\u001F除外されている\u007F"
#=> "\u0000制御文字が\u001F除外されている\u007F"
この制御文字は gsub メソッドと正規表現で取り除くことができる
pry(main)> puts string.gsub(/[\u0000-\u001f\u007f]/, '')
制御文字が除外されている
#=> nil
pry(main)> p string.gsub(/[\u0000-\u001f\u007f]/, '')
"制御文字が除外されている"
#=> "制御文字が除外されている"
こんな書き方もできるっぽい
pry(main)> puts string.gsub(/[[:cntrl:]]/, '')
制御文字が除外されている
#=> nil
pry(main)> p string.gsub(/[[:cntrl:]]/, '')
"制御文字が除外されている"
#=> "制御文字が除外されている"