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解决了问题,问题出在默认代码页(编码)中,因此要解决它,您必须通过以下任一方式设置正确的默认代码页(编码):
-
在ruby中将编码更改为utf-8或其他正确的编码,请执行以下操作:
Encoding.default_external = Encoding::UTF_8
-
在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
来修复此问题。