【发布时间】:2016-05-13 09:10:49
【问题描述】:
当通过 csv 文件从外部来源(例如我的银行)收集包含英镑符号“£”的信息并使用 ActiveRecord 发布到 postgres 时,我收到错误:
PG::CharacterNotInRepertoire: ERROR: invalid byte sequence for encoding “UTF8”: 0xa3
0xa3 是 £ 符号的十六进制代码。感知的智慧是在字符串上明确指定 UTF-8,同时替换无效的字节序列..
string.encode('UTF-8', {:invalid => :replace, :undef => :replace, :replace => '?'})
这会阻止错误,但这是一个有损修复,因为“£”被转换为“?”
UTF-8 能够处理“£”符号,那么如何修复无效的字节序列并保留“£”符号?
【问题讨论】:
-
0xa3 是 microsuft 的 cp1252(和 iso8859-1)中井号的代码点。您的数据可能未编码为 utf8。 en.wikipedia.org/wiki/Windows-1252
-
你是对的@wildplasser,源文件有微软编码——一个带有.xls扩展名的HTML文件下载。 Ruby 将其作为 UTF-8 处理,除了 £ 符号之前没有正确的字符序列。
标签: ruby postgresql ruby-on-rails-4 encoding utf-8