0

我有一个脚本,它在处理过程中遇到“\xE9”时会出错。

输出

puts a
{:label=>"\xE9\xBE\x99\xE9\x97\xA8\xE9\x95\x96\xE5\xB1\x80", :value=>20}
{:label=>"c", :value=>18}

错误

scheduler caught exception: "\xE9" from ASCII-8BIT to UTF-8

在线

# pass in an array with a hash
send_event('report', { items: count })

如何处理这些值?

解决方案

检查来自像这个UTF-8 Decoder这样的网站的编码类型。

循环:label以应用正确的编码。

a.each do |data|
  data[:label].force_encoding("UTF-8")
end

谢谢

4

1 回答 1

4

最好知道如何提问。鉴于您对问题的描述,那些对问题感兴趣并愿意提供帮助的人必须提出很多问题才能使问题具体、切题和清晰。事实证明,帮助者在问问题,而你在回答问题。奇怪的。

  • 你正在解决什么问题?
  • 在什么系统环境下?(默认语言环境,默认系统编码?)
  • 数据:label=>"\xE9\xBE\x99\xE9\x97..."从何而来?
  • 您使用什么工具/库?即调度器
  • 容易出错的行的上下文是什么?即围绕它的代码,调用堆栈
  • ...

要尝试根据您的描述提供一些帮助,您可以去检查实际的编码:label=>"\xE9\xBE\x99\xE9\x97..."是什么。在处理之前应用正确的编码:

a.each do |data|
  data[:label].force_encoding(CORRECT-ENCODING)
end

而且,其中的字节似乎a[0][:label]代表一个 UTF-8 字符串"龙门镖局",因此您需要指定其编码,例如:

a[0][:label].force_encoding("UTF-8")
于 2013-08-14T02:14:15.103 回答