我正在从数据库中读取YAML字符串,我无法控制将哪个Unicode存储为字符串文字。
我想在csv文件中输出实际字符ö
,但它仍会输出\\xC3\\xB6
帮助。
答案 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