有时,我会在字符串的中间遇到一些不可打印的恶意字符。这些字符串是用户输入的,所以我必须让我的程序正确接收它,而不是试图改变问题的源头。
例如,它们可能在字符串中间包含零宽度不换行空格。例如,在解析一个
例如,它们可能在字符串中间包含零宽度不换行空格。例如,在解析一个
.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]
我相信我知道什么是BOM
,而且我甚至能很好地处理它。然而有时我会在文件中间出现这样的字符,因此它不是BOM
。
我目前的方法是以一种非常恶心的方式删除我发现的所有“邪恶”字符:
text = (text.codepoints - CODEPOINTS_BlACKLIST).pack("U*")
我找到的最接近的方法是参考这篇文章,其中提到了正则表达式选项:print:
。然而,它对我没有用:
"m".scan(/[[:print:]]/).join.codepoints
=> [65279, 109]
所以问题是:如何在ruby中删除字符串中的所有不可打印字符?
dump
,它可以生成一个新的字符串,去除非打印字符并对特殊字符进行转义。String#dump是Ruby 2.3.0的文档,但我可以确认早在1.8.7版本的文档中也有介绍。 - Aaron