高木のブログ

【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:]]/, '')
"制御文字が除外されている"
#=> "制御文字が除外されている"

参考


ytkg

Written by ytkg, Twitter, GitHub