Microsoft Word符号的编码问题[UTF-8至ISO-5589-1]

时间:2012-05-25 23:33:16

标签: ruby ruby-on-rails-3 encoding content-type decoding

我一直在处理从Microsoft Word复制并粘贴的内容并提交给我们的系统。

内容包括多字节符号,例如:“ ” ’,我想将其转换为" " '

由于我们的app / database配置为UTF-8,因此提交并存储这些多字节符号没有任何问题。但是当我们将我们的信息联合到使用ISO-8859-1的第三方时,我们遇到了一些编码问题。

有人有这个问题吗?或者有可能的解决方案?

1 个答案:

答案 0 :(得分: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字符之间关系的库,并使用它。