我正在用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
复制相似问题