【问题标题】:How can I easily replace special characters with rvest-friendly UTF-8 (hex.)如何使用 rvest 友好的 UTF-8(十六进制)轻松替换特殊字符
【发布时间】:2018-04-07 15:00:51
【问题描述】:

我需要将 é 和 â 等特殊字符替换为 %C3%A9、%C3%A2 等字符串。这是因为带有特殊字符的 url 可以在浏览器中工作,但不适用于 R 的 rvest::read_html() 函数 - 它需要 "%C3%A9" 样式字符串来代替特殊字符。

目前,由于 url 中有特殊字符,我不得不等到出现错误,然后我必须手动查找特殊字符的等效值 here,然后 gsub :

  list_of_urls %>% 
  gsub("é", "%C3%A9", .) %>% 
  gsub("â", "%C3%A2", .) %>% 
  gsub("ç", "%C3%A7", .) %>% 
  gsub("á", "%C3%A1", .)

是否有一个 R 函数可以自动对所有特殊字符执行此操作(即,没有单个字符的所有 gsub)?

例如,字符串“glaçage”应该变成“gla%C3%A7age”

字符串“café”应该变成“caf%C3%A9”

【问题讨论】:

  • 如果你只想要单词的非重音版本,你可以使用iconv(yourstrings, to="ASCII//TRANSLIT"),或者stringi 包有很多编码帮助,可能会以任何你需要的方式帮助你。您应该使用可以复制的示例更新您的问题,否则很难提供帮助。谢谢:)
  • 我已经包含了一些示例。至于 stringi,我尝试了几个 stringi 函数但无法正常工作(完全有可能我没有正确应用它们)

标签: r unicode encoding utf-8 rvest


【解决方案1】:

utils 中的URLencode 怎么样?以下是它在您的示例中的工作方式:

> library(utils)
> URLencode("glaçage")
[1] "gla%E7age"
> z <- URLencode("glaçage")
> URLdecode(z)
[1] "glaçage"

第二个例子:

> URLencode("café")
[1] "caf%E9"

【讨论】:

  • 我得到 [1] "gla%C3%A7age" 和 [1] "caf%C3%A9" 用于您的两个编码调用。在当前 R 版本的 Mac 上。
  • 刚刚在 R 和 RStudio 的 3.4.3 和 3.4.4 上再次运行命令并得到与上面相同的结果。编码 btwn OS 有区别吗?还没有听说过……很有趣。
  • Windoze 在编码方面经常是个怪人。
猜你喜欢
  • 1970-01-01
  • 2014-08-07
  • 2015-04-28
  • 2020-10-26
  • 2020-02-06
  • 2013-01-24
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
相关资源
最近更新 更多