我在想是否有一种方法可以在Rails中检测非ASCII字符。据我所知,Rails默认不使用Unicode,而像中文和日文这样的字符在Unicode中有指定的范围。是否有一种简单的方法在Rails中检测这些字符?还是只需指定我所期望的字符范围即可?是否有相应的插件可用?谢谢!
class String
def multibyte?
chars.count < bytes.count
end
end
"可口可樂".multibyte? #=> true
"qwerty".multibyte? #=> false
在1.9.2中,这非常容易实现,因为正则表达式是基于字符的,并且1.9.2从上到下知道字节和字符之间的区别。你正在使用Rails,所以你应该得到UTF-8编码的所有内容。令人高兴的是,UTF-8和ASCII在整个ASCII范围内重叠,因此当你有UTF-8编码的文本时,只需删除不在' '
和'~'
之间的所有内容:
>> "Wheré is µ~pancakes ho元use?".gsub(/[^ -~]/, '')
=> "Wher is ~pancakes house?"
不过,确实没有必要这样费劲。Ruby 1.9 和 Rails 以及几乎所有其他东西都可以很好地处理 Unicode。15 年前处理非 ASCII 文本是一场噩梦,现在它已经很常见并且相当直接了。
如果您成功获取到的文本数据不是UTF-8编码,那么您有一些选择。如果编码是ASCII-8BIT
或BINARY
,那么您可以尝试使用s.force_encoding('utf-8')
。如果最终得到的编码不是UTF-8
和ASCII-8BIT
,那么您可以使用Iconv进行重新编码。
参考资料:
utf8_string.mangle.should == utf8less_string
等测试即可。 - mu is too short
é
算吗?ñ
、µ
、ü
或≠
呢?你是不是只想限制人们使用(7位) ASCII码 ?Rails对Unicode(最好是UTF-8)非常适用。 - mu is too short