编码:: UndefinedConversionError“\ xE7”从ASCII-8BIT到UTF-8

时间:2017-05-04 09:34:06

标签: ruby-on-rails ruby macos encoding utf-8

我正在开发一个rails API项目。 这是我的代码片段

class PeopleController < ApplicationController
  respond_to :json

  def index
    respond_with Person.all
  end
end

当我访问网址localhost:3000/people.json

Encoding::UndefinedConversionError at /people.json
"\xE7" from ASCII-8BIT to UTF-8

自上周以来,我正试图解决这个问题,但仍在与此作斗争。 我在堆栈溢出中发现了一堆类似问题,例如this&amp; this但非解决方案对我有用。

以下是我的配置。

Rails 4.2.7.1

红宝石2.3.1

操作系统:macOS Sierra

locale

的输出
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

内容 ~/.bash_profile

export LC_CTYPE="utf-8"
export LC_CTYPE=en_US.UTF-8
export LANG=en_US.UTF-8
unset LC_ALL

输出 Encoding.default_external

 #<Encoding:UTF-8> 

1 个答案:

答案 0 :(得分:1)

我经常遇到这个问题,所以我通常会尝试删除任何对UTF-8无效的字符,然后再保存在数据库中。如果您将记录保存为String,则可以替换无效字符,如下所示:

string = "This contains an invalid character \xE7"
string.encode('UTF-8', invalid: :replace, undef: :replace)
#=> "This contains an invalid character �"

在将其转换为JSON对象之前,这是有效的。