文字列の途中に印刷できない悪意のある文字が含まれていることがあります。これらの文字列はユーザー入力であるため、問題の原因を変えようとするのではなく、プログラムが正しく受信できるようにする必要があります。
たとえば、文字列の途中にゼロ幅の改行なしスペースを含めることができます。たとえば、ファイルを解析しているときに問題があったのは、ファイルの途中にある文字列でした。すべてが正しいように見えますが、ショーで検査すると次のようになります。.po
"he is a man of god"
irb
"he is a man of god".codepoints
=> [104, 101, 32, 105, 115, 32, 97, 32, 65279, 109, 97, 110, 32, 111, 102, 32, 103, 111, 100]
私は a が何であるかを知っていると信じておりBOM
、それをうまく処理しています。ただし、ファイルの途中にそのような文字がある場合があるため、BOM
.
私の現在のアプローチは、私が本当に悪臭を放つ方法で悪を見つけたすべてのキャラクターを削除することです:
text = (text.codepoints - CODEPOINTS_BlACKLIST).pack("U*")
私が得た最も近いものは、正規表現のオプションにつながったこの投稿に従うことでした。:print:
しかし、それは私にとっては良くありませんでした:
"m".scan(/[[:print:]]/).join.codepoints
=> [65279, 109]
質問は次のとおりです:ルビの文字列からすべての印刷不可能な文字を削除するにはどうすればよいですか?