有时我在字符串中间有邪恶的不可打印字符。这些字符串是用户输入的,所以我必须让我的程序很好地接收它,而不是试图改变问题的根源。
例如,它们可以在字符串中间有零宽度的不间断空格。例如,在解析文件时,一个有问题的部分是文件中间的字符串。虽然一切看起来都是正确的,但通过以下节目进行检查:.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]
我相信我知道 aBOM
是什么,我什至可以很好地处理它。但是有时我在文件中间有这样的字符,所以它不是BOM
.
我目前的方法是以一种非常臭的方式删除所有我发现邪恶的角色:
text = (text.codepoints - CODEPOINTS_BlACKLIST).pack("U*")
我得到的最接近的是关注这篇文章,这使我:print:
选择了正则表达式。然而这对我没有好处:
"m".scan(/[[:print:]]/).join.codepoints
=> [65279, 109]
所以问题是:如何从 ruby 中的字符串中删除所有不可打印的字符?