【问题标题】:Parsing UTF-8 with Faraday使用 Faraday 解析 UTF-8
【发布时间】:2018-09-14 13:57:05
【问题描述】:

我正在使用 Ruby 中的 Faraday 发出 API 请求,并使用 JSON.parse 解析它。问题是,JSON 响应中有诸如 Longitud de la estaci\u00F3n meteorol\u00F3gica (grados) 之类的句子,但它应该是 Longitud de la estación meteorológica (grados)

有没有办法正确解析这个? 我有connection = Faraday.new(my_site),如果我有connection.get.body.encoding,那么我会得到#<Encoding:ASCII-8BIT>,但是当我尝试connection.get.body.force_encoding('ASCII-8BIT).force_encoding('UTF-8)connection.get.body.force_encoding('ASCII-8BIT).encode('UTF-8) 时,我会得到'encode': "\xF3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)

提前非常感谢!

【问题讨论】:

  • 您能否在 JSON 字符串中发布相关子字符串的 String#bytes,例如“estación”部分?我不知道“\u00F3”是一个 6 字节的 ASCII 字符串还是一个字节的 8 位字符串...

标签: ruby character-encoding faraday


【解决方案1】:

试试这个:

connection.get.body.force_encoding('ISO-8859-1').encode('UTF-8')

我不知道法拉第,但从Encoding::UndefinedConversionError 错误来看,可能是这样。我假设 connection.get.body 返回一个普通的 String 实例或其等价物。

背景

正如official document (Ver.2.5.1) 所述,您不应尝试将ASCII-8BIT 转换为任何其他编码:

Encoding::ASCII_8BIT 是一种特殊编码,通常用于字节串,而不是字符串。

所谓的扩展 ASCII,它包含一些字母标点符号,通常是 ISO-8859-1,尽管存在其他编码方法。当然o' 的代码点是ISO-8859-1 中的\xF3。这是一个代码sn-p来演示它:

"\xf3".force_encoding('ISO-8859-1').encode('UTF-8')
  # => "ó"
"\xf3".force_encoding('ASCII-8BIT').encode('UTF-8')
  # => Encoding::UndefinedConversionError 

This past answer 更详细地解释了它。

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 2018-02-07
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2020-01-20
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多