ruby - 使用 Faraday 解析 UTF-8
问题描述
我正在使用 Ruby 中的 Faraday 发出 API 请求,并使用JSON.parse
. 问题是,JSON 响应中包含诸如Longitud de la estaci\u00F3n meteorol\u00F3gica (grados)
but it should be 之类的句子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)
。
提前非常感谢!
解决方案
尝试这个:
connection.get.body.force_encoding('ISO-8859-1').encode('UTF-8')
我不知道法拉第,但从Encoding::UndefinedConversionError
错误来看,可能就是这样。我假设connection.get.body
返回一个普通的 String 实例或其等价物。
背景
正如官方文档(Ver.2.5.1)所述,您不应尝试转换ASCII-8BIT
为任何其他编码:
Encoding::ASCII_8BIT 是一种特殊的编码,通常用于字节串,而不是字符串。
所谓的扩展 ASCII,其中包含一些字母标点符号,通常是 ISO-8859-1,尽管存在其他编码方法。当然,在 ISO-8859-1 中o
with的代码点'
是 \xF3。这是一个演示它的代码片段:
"\xf3".force_encoding('ISO-8859-1').encode('UTF-8')
# => "ó"
"\xf3".force_encoding('ASCII-8BIT').encode('UTF-8')
# => Encoding::UndefinedConversionError
这个过去的答案更详细地解释了它。
推荐阅读
- python - 根据成本和时间计算概率
- gnuplot - 如何更改线图的颜色?
- android - 使用 Room 实时查询进行生命周期状态管理
- web-services - 创建从 TRemotable 继承的对象后访问冲突
- ansible - Ansible - 在不复制远程主机的文件结构的情况下将文件集合获取到目标?
- vb.net - 在单个表单编码中禁用/启用 TAB 键(不是所有控制键)
- alloy - 合金分析器未找到在应用具有基数约束的谓词之前找到的示例
- automation - 我可以有条件地跳过测试用例并将测试用例状态显示为“跳过”,并在报告中显示“通过”和“失败”吗?
- react-native - 反应原生地图的高效包
- java - 在具有多个线程的程序中可能会遇到什么问题?