我有一个编码ASCII-8BIT的字符串:
str = 'quindi \xE8 al \r\ngoverno'
我想将其转码为UTF-8,因为没有char可视化问题。
当然,\xE8
不是UTF-8中的有效序列,因此我在尝试时遇到错误:
str.encode 'utf-8'
返回:
UndefinedConversionError "\xE8" from ASCII-8BIT to UTF-8
阅读有关编码方法的文档,我想出了这个解决方案:
encode('UTF-8', invalid: :replace, undef: :replace)
这样,所有无效序列都被?
替换。但是如果我想显示正确的字符而不是?
。我在本文中有不同的转义序列,\xE8
,\xE0
...
有没有办法自动用正确的转义字符替换它们?
答案 0 :(得分:1)
您的字符串似乎是ISO-8859-1编码的。这应该有效:
str = "quindi \xE8 al \r\ngoverno"
str.force_encoding('ISO-8859-1').encode('UTF-8')
#=> "quindi è al \r\ngoverno"
请注意,您必须使用双引号。