我一直在处理从Microsoft Word复制并粘贴的内容并提交给我们的系统。
内容包括多字节符号,例如:“ ” ’
,我想将其转换为" " '
。
由于我们的app / database配置为UTF-8,因此提交并存储这些多字节符号没有任何问题。但是当我们将我们的信息联合到使用ISO-8859-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字符之间关系的库,并使用它。