问题

函数url_parse非常快,工作正常.但最近,域名可能包含UTF-8字符,例如

 url <- "www.cordes-tiefkühlprodukte.de"
 

现在,如果我在此url上应用url_parse,我在域列中得到一个特殊字符“”:

 url_parse(url)
  scheme                            domain port path parameter fragment
1   <NA> www.cordes-tiefk<fc>hlprodukte.de <NA> <NA>      <NA>     <NA>
 

我的问题是:如何“修复”这个条目到UTF-8?我尝试了iconvstringi包中的一些函数,但没有成功.

(我知道httr::parse_url,它没有这个问题.所以一种方法是检测不是ascii的网址,并在这些上使用url_parse,在少数特殊情况下使用parse_url.但是,这会导致问题(有效)检测非-asciii URL.)

编辑:不幸的是,url1 <- URLencode(enc2utf8(url))没有帮助.当我这样做

 robotstxt::paths_allowed(
    url1, 
    domain=urltools::suffix_extract(urltools::domain(url1))
)
 

我收到错误could not resolve host.但是,手工插入原始URL和第二级域,paths_allowed工作.

 > sessionInfo()
 

R版3.6.1(2019-07-05) 平台:x86_64-w64-mingw32/x64(64-bit) 在下面运行:Windows 10 x64(构建17134)

矩阵产品:默认

语言环境: [1] LC_COLLATE = 德国_Germany.1252 LC_CTYPE = 德国_Germany.1252
2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表 [3] LC_MONETARY = 德国_德国.1252 LC_NUMERIC = C
2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表 [5] LC_TIME = 德国_德国.1252

所附基本包: [1] stats traphic grDevices utils dates methods base

其他所附包件: [1] urltools_1.7.3 fustions_1.5-4

通过名称空间加载(不附加): [1]编译器_3.6.1 Rcpp_1.0.1三胡子_0.3.0

  最佳答案

我可以重现这个问题.我可以通过使用readr::parse_characterlatin1编码将列domain转换为UTF-8:

 library(urltools)
library(tidyverse)

url <- "www.cordes-tiefkühlprodukte.de"

parts <- 
  url_parse(url) %>% 
  mutate(domain = parse_character(domain, locale = locale(encoding = "latin1")))

parts

  scheme                         domain port path parameter fragment
1   <NA> www.cordes-tiefkühlprodukte.de <NA> <NA>      <NA>     <NA>
 

我想您必须指定的编码(here latin1)只取决于您的语言环境,而不取决于url的特殊字符,但我不是100%确定这一点.

  相同标签的其他问题

rurl-parsing
上一个问题: