ruby`coding’:“\ xC3”从ASCII-8BIT到UTF-8(Encoding :: UndefinedConversionError)

tvdb中的汉尼拔剧集中有奇怪的人物。

例如:

Œuf 

所以ruby吐出来:

 ./manifesto.rb:19:in `encode': "\xC3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) from ./manifesto.rb:19:in `to_json' from ./manifesto.rb:19:in `' 

第19行是:

 puts @tree.to_json 

有没有办法处理这些非utf字符? 我宁愿不更换它们,而是转换它们? 还是忽略它们? 我不知道,任何帮助表示赞赏。

奇怪的是,脚本通过cron工作正常。 手动运行它会产生错误。

看来你应该为对象使用另一种编码。 您应该将正确的代码页设置为变量@tree ,例如,使用iso-8859-1而不是ascii-8bit ,使用@tree.force_encoding('ISO-8859-1') 。 因为ASCII-8BIT仅用于二进制文件。

要查找ruby的当前外部编码,请发出:

 Encoding.default_external 

如果sudo解决了问题,问题出在默认代码页(编码)中,因此要解决它,您必须通过以下任一方式设置正确的默认代码页(编码):

  1. 在ruby中将编码更改为utf-8或其他正确的编码,请执行以下操作:

     Encoding.default_external = Encoding::UTF_8 
  2. 在bash中 , grep当前有效设置:

     $ sudo env|grep UTF-8 LC_ALL=ru_RU.UTF-8 LANG=ru_RU.UTF-8 

    然后以类似的方式在.bashrc正确设置它们,但不完全用ru_RU语言,如下所示:

     export LC_ALL=ru_RU.UTF-8 export LANG=ru_RU.UTF-8 

File.open(yml_file,’w’)应该更改为File.open(yml_file,’w b ‘)

我刚刚经历了几个小时的努力来解决类似的问题。 我检查了我的语言环境,数据库编码,我能想到的一切,并且仍然从数据库中获取ASCII-8BIT编码数据。

好吧,事实certificate,如果您将文本存储在二进制字段中,它将自动返回为ASCII-8BIT编码文本,这是有道理的,但这可能(显然)会导致应用程序出现问题。

可以通过将列编码更改回迁移中的:text来修复此问题。