Rails 3, Heroku: Taps服务器错误。PGError: ERROR:编码 "UTF8 "的字节序列无效。0xba[英] Rails 3, Heroku: Taps Server Error: PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xba

本文是小编为大家收集整理的关于Rails 3, Heroku: Taps服务器错误。PGError: ERROR:编码 "UTF8 "的字节序列无效。0xba的处理方法,想解了Rails 3, Heroku: Taps服务器错误。PGError: ERROR:编码 "UTF8 "的字节序列无效。0xba的问题怎么解决?Rails 3, Heroku: Taps服务器错误。PGError: ERROR:编码 "UTF8 "的字节序列无效。0xba问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个 Rails 3.0.9 应用程序在我的开发环境中本地运行,并在 heroku 应用程序上远程运行.我有 一种将 CSV 文件导入模型的方法,该文件可以包含非英文字符,如°、á、é、í 等(西班牙语).

我目前能够在我的本地开发 (SQLite) 数据库中导入完整文件(75k 条记录)而没有任何问题;但是,当使用 heroku db:push 将 db 上传到 heroku 时,失败并出现我在标题中发布的错误:

!!! Caught Server Exception

HTTP CODE: 500
Taps Server Error: PGError: ERROR:  invalid byte sequence for encoding "UTF8": 0xba
HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

显然,Heroku 在插入"°"字符时遇到了问题.(目前该文件没有任何 á、é、í 等字符,但我怀疑这些也可能失败.)

我已经在我的application.rb文件中设置了默认编码,如下:

#.../application.rb
config.encoding = "utf-8"

我还能做些什么来设置"客户端编码"并解决这个问题?

推荐答案

数字符号,º,在 ISO-8869-1<中是 0xBA/a> 不是 UTF-8.因此,您的 CSV 文件使用 Latin-1 编码,但您尝试将其作为 UTF-8 存储在数据库中而不修复编码.

您可以尝试告诉您的 CSV 库它正在处理 Latin-1 编码的文本,也许它会负责转换为 UTF-8.如果这不起作用,那么您可以自己使用 Iconv:

ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xba")
 => ["º"]
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xb0")
 => ["°"]

您不会在使用 SQLite 时遇到问题,因为 SQLite 往往非常宽容,而且它的类型系统非常松散.如果您尝试向其提供无效数据,PostgreSQL,OTOH 往往会相当严格并且会适当地抱怨.如果您要部署到 Heroku 和 PostgreSQL,我建议您停止在 SQLite 之上进行开发,还有其他差异会导致问题(例如 GROUP BY 和 LIKE 的行为).

本文地址:https://www.itbaoku.cn/post/1764203.html