有时候,我有一个字符串中间恶非打印字符。 这些字符串是用户输入的,所以我必须让我的程序收到很好,而不是试图改变问题的根源。
例如,它们可以具有零宽度无间断间隔的字符串的中间 。 例如,在解析.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]
所以问题是: 如何从红宝石字符串中删除所有非打印字符?