新手问题 奇怪的 Encoding::UndefinedConversionError: "\xE5" from ASCII-8BIT to UTF-8

yukihiro_matz · 2014年12月16日 · 最后由 nemo733 回复于 2015年11月02日 · 12984 次阅读

渲染 json 的时候,乱码问题

插入到数据库里是正常的

编码是 utf8 的

rails console 直接查询也是可以的。

就是在渲染的时候出问题了

直接 binding.pry 看,就有

Encoding::UndefinedConversionError: "\xE5" from ASCII-8BIT to UTF-8

\xE5\xA4\xA9\xE5\xA4\xA9\xE8\xB7\xAF114\xE5\x8F\xB7

这种问题

求助,还有可以是哪方面的问题?

rails 4.1.8

在 ubuntu 14.04 和 mac os 10.10 上都是这样,有人遇到过类似的问题吗?


发现 grape 得到的参数是有问题的

但是存数据库是没问题的 临时在 jbuilder 模板里强制 encoding utf8 了

json.contact_address @customer_address.contact_address.force_encoding("UTF-8")

多年前的东西了不知道对你有没有用处,https://ruby-china.org/topics/2452

#1 楼 @ywjno 之前都搜到过, 知道是编码的问题,但是找不到哪编码出的问题

加入这个 activesupport-json_encoder gem 试试呢? https://github.com/rails/rails/issues/15226

#3 楼 @kungs 试了下,没有异常了,不过渲染的 json 还是乱码, 我临时在 json 模板里 force_encoding("UTF-8") 了

#4 楼 @yukihiro_matz 不是乱码,就是中文的 UTF-8 编码,可以不用转换,传给 view 或者客户端应该能够正确显示中文。

#5 楼 @kungs 不是乱码,直接 utf8 编码了

[7] pry(#<Grape::Endpoint>)> @customer_address.contact_address
=> "\xE5\xA4\xA9\xE5\xA4\xA9\xE8\xB7\xAF114\xE5\x8F\xB7"

也遇到和楼主同样的问题,请问楼主现在解决了吗?

来自 RubyChina4Android

describe 一下 table 看看编码对不对, 看看 database.yml 有没有 utf-8 设置, 看看环境变量 $LANG 是不是 utf-8

应该是 pry 的问题,设置编码或字符没用。 有时候是查询出来的内容格式不对;或者,查询能正常显示,但输入的时候格式不对,然后直接崩溃。

直接去掉 pry-rails 有时候又不方便,折中的办法,打开控制台: DISABLE_PRY_RAILS=1 rails console

遇到同样的问题,activesupport-json_encoder gem 加入了,render json:@user// user 中包含 gender:男 这个属性,还是会报错;但是 render json:@user.gender 便不会报错?请问想传回整个@user如何处理

需要 登录 后方可回复, 如果你还没有账号请 注册新账号