首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Faraday解析UTF-8

用Faraday解析UTF-8
EN

Stack Overflow用户
提问于 2018-09-14 13:57:05
回答 1查看 1.3K关注 0票数 1

我正在用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)

提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-09-17 11:13:07

试试这个:

代码语言:javascript
运行
复制
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。下面是演示它的代码片段:

代码语言:javascript
运行
复制
"\xf3".force_encoding('ISO-8859-1').encode('UTF-8')
  # => "ó"
"\xf3".force_encoding('ASCII-8BIT').encode('UTF-8')
  # => Encoding::UndefinedConversionError 

这个过去的答案对此作了更详细的解释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52333513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档