如何在Ruby中删除字符串中的垃圾符号?

时间:2014-09-10 09:54:56

标签: ruby-on-rails ruby regex ruby-on-rails-3

我有一个字符串变量,内容如下:

str =  "abc�"

如何在Ruby on Rails中检查和删除字符串是否有“ ”符号?

2 个答案:

答案 0 :(得分:2)

字符“�”为U+FFFD REPLACEMENT CHARACTER in Unicode。如果你的字符串字面上包含该字符,那么删除它就像这样简单:

cleaned_string = str.gsub "�", ''

或(假设您要避免在代码中键入文字“�”):

cleaned_string = str.gsub "\ufffd", ''

维基百科对此字符说:

  

它用于指示系统无法将数据流呈现为正确符号时的问题。

因此,您可能真正的问题是您没有正确处理此字符串的来源 - 很可能这是一个编码问题。例如,如果字符串最初是abcé,但是在ISO-8859-1编码中,但是某些系统将其解释为UTF-8,则最终字符é将无效,并且该系统然后可以将其显示为“�”,这是您的程序所看到的。 (维基百科页面有另一个例子。)

如果这是一个编码问题,那么根据这些数据的来源,你可能为时已晚,实际数据可能已经丢失,你可以做的最好的事情就是删除这些字符(或者您可能希望留下它们来表明存在问题的地方)。否则,在将数据读入程序时需要小心,将其作为适当的编码读取,这样数据就不会丢失。

如果角色编码对你来说是全新的,那么开始学习它们的好地方是Joel Spolsky的文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

答案 1 :(得分:0)

(1)当你有

时,你会得到什么?

str.inspect

显示?

(2)如果您知道,字符串中允许的字符范围是什么,您可以反过来替换任何不在此范围内的字符。