来自数据库的字符串作为\\ xC3 \\ xB6,但是我需要实际的字符“ö”才能写入CSV

时间:2018-11-05 08:36:27

标签: ruby unicode encoding utf-8 yaml

我正在从数据库中读取YAML字符串,我无法控制将哪个Unicode存储为字符串文字。

我想在csv文件中输出实际字符ö,但它仍会输出\\xC3\\xB6

帮助。

1 个答案:

答案 0 :(得分:0)

数据库显然包含格式错误的字符串。由于您无法从源头(即在数据库中)修复该错误,因此可以使用gsub将每个十六进制转义序列替换为其实际值:

str = "\\xc3\\xb6"
#=> "\\xc3\\xb6"
str.length
#=> 8

str.gsub!(/\\x(\h{2})/) { [$1].pack('H2') }
#=> "\xC3\xB6"
str.length
#=> 2

然后您可以告诉Ruby将字符串的字节解释为UTF-8:

str.force_encoding('UTF-8')
#=> "ö"
str.length
#=> 1