问问题
1344 次
1 回答
0
由于内置的 String#force_encoding方法会将多字节符号转换为自身的表示,而不是替换,因此您不能使用它。
str = "“ ” ’"
str.force_encoding("ISO-8859-1")
#=> "\xE2\x80\x9C \xE2\x80\x9D \xE2\x80\x99"
您可以尝试String#encode,但这只能用某些东西替换所有无效/未定义的字符,而不是单独替换每个字符。
str = "“ ” ’"
str.encode("ISO-8859-1", :invalid => :replace, :undef => :replace, :replace => "")
#=> " "
str = "“ ” ’ €"
str.encode("ISO-8859-1", :invalid => :replace, :undef => :replace, :replace => "'")
#=> "' ' ' '"
最有可能的是,您需要编写或找到一个库来维护 unicode 多字节字符和它们对应的 ASCII 字符之间的关系,并使用它。
于 2012-05-26T03:39:45.820 回答