Ruby on rails 检测Rails中的非ASCII字符

Ruby on rails 检测Rails中的非ASCII字符,ruby-on-rails,unicode,character-encoding,Ruby On Rails,Unicode,Character Encoding,我想知道是否有一种方法可以检测Rails中的非ASCII字符 我读到Rails默认情况下不使用Unicode,像中文和日文这样的字符用Unicode指定了范围。有没有一种简单的方法来检测Rails中的这些字符?或者只是指定我期望的字符范围 有这个插件吗?提前谢谢 这在1.9.2中非常容易,因为正则表达式在1.9.2中是基于字符的,1.9.2知道字节和字符自上而下的区别。你在Rails中,所以你应该在UTF-8中获得一切。幸运的是,UTF-8和ASCII在整个ASCII范围内重叠,因此当您使用UT

我想知道是否有一种方法可以检测Rails中的非ASCII字符

我读到Rails默认情况下不使用Unicode,像中文和日文这样的字符用Unicode指定了范围。有没有一种简单的方法来检测Rails中的这些字符?或者只是指定我期望的字符范围


有这个插件吗?提前谢谢

这在1.9.2中非常容易,因为正则表达式在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?"
不过,真的没有理由这么麻烦。Ruby1.9与Unicode配合使用非常好,Rails和几乎所有其他功能都是如此。15年前,处理非ASCII文本是一场噩梦,现在它很常见,而且相当简单


如果您确实设法获取非UTF-8的文本数据,那么您有一些选择。如果编码是
ASCII-8BIT
BINARY
,那么您可能可以使用
s.force_编码('utf-8')
。如果最终得到的不是
UTF-8
ASCII-8BIT
,则可以使用对其重新编码

参考资料:


所有表意语言编码都使用多个字节来表示字符,Ruby 1.9+知道字节和字符之间的区别(Ruby 1.8没有)

您可以将字符串的字符长度与字节长度进行比较,这是一个快速而肮脏的检测器。但这可能不是万无一失的

class String
  def multibyte?
    chars.count < bytes.count
  end
end

"可口可樂".multibyte? #=> true
"qwerty".multibyte? #=> false
类字符串
def多字节?
chars.count真
“qwerty”。多字节?#=>错误

什么才算是“外来字符”?
是外来字符?那么
ñ
µ
ü
呢≠?您是否试图将人们限制为仅使用(7位)ASCII?Rails对Unicode(最好使用UTF-8)非常满意。是的,我正在尝试阻止所有这些字符。我如何使用UTF-8?对不起,这里是noob。@U lu\u kim先生:你想做哪一个?Rails中默认情况下,所有内容都应该是UTF-8。Ruby的哪个版本?1.9.2,是否更容易指定我允许的w/c字符或阻止所有外国字符,如中文、日语、法语等?谢谢!还有,你知道吗如何在rspec中测试外来字符的过滤?@mr_lu_kim:与在rspec中测试任何其他字符串操作的方法相同。您只需执行各种
utf8_string.mangle.should==utf8less_string
之类的操作。谢谢!但我使用regex来匹配它们,比如匹配{Han}其他的SRegex比这个好,更简单,更精确,但这可能比regex快得多。这个方法看起来很聪明。谢谢!简单的智能解决方案-澄清一下,这将区分Unicode中的128个US-ASCII字符(需要一个字节)和其他所有字符-包括所有外来字母,但也包括像c这样的东西opyright符号。(此处信息:和)