我正在用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)。
提前谢谢!
发布于 2018-09-17 11:13:07
试试这个:
connection.get.body.force_encoding('ISO-8859-1').encode('UTF-8')我不知道法拉第,但从Encoding::UndefinedConversionError错误来看,情况可能是这样的。我假设connection.get.body返回一个普通的字符串实例或它的等效实例。
背景
正如正式文件(Ver.2.5.1)声明的那样,您不应该尝试将ASCII-8BIT转换为任何其他编码:
Encoding::ASCII_8BIT是一种特殊的编码,通常用于字节字符串,而不是字符串。
所谓的扩展ASCII,包含一些标点符号的字母表,通常是ISO-8859-1,尽管有其他的编码方法。当然,在ISO8859-1中,o与'的代码点是\xF3。下面是演示它的代码片段:
"\xf3".force_encoding('ISO-8859-1').encode('UTF-8')
# => "ó"
"\xf3".force_encoding('ASCII-8BIT').encode('UTF-8')
# => Encoding::UndefinedConversionError 这个过去的答案对此作了更详细的解释。
https://stackoverflow.com/questions/52333513
复制相似问题