R语言 无法将'...'转换为宽字符串

fdbelqdn  于 2023-09-27  发布在  其他
关注(0)|答案(2)|浏览(404)

在我看来,R在4.3.0版本中引入了一个新的错误,这破坏了我的很多网络抓取器。我只发现一个提到的变化,但不真正理解blog post
本质上,这段代码在较新版本的R上失败了,但较旧版本做了一些内部转换,似乎可以工作:

text <- "\xa0 x"
gsub("x", "u", text)
#> Warning in gsub("x", "u", text): unable to translate '<a0> x' to a wide string
#> Error in gsub("x", "u", text): input string 1 is invalid

创建于2023-07-13带有reprex v2.0.2
在进行字符串操作之前,有没有什么方法可以删除这些特殊字符?请注意,我不知 prop 体是哪些字符失败,因为我正在处理的真实的字符串太长而无法检查。

ht4b089n

ht4b089n1#

这是一个编码问题,text没有被解释为有效的字符串,因为它包含非ASCII字符。
转换为UTF-8:

text_utf8 <- iconv(text, from = "ISO-8859-1", to = "UTF-8")
gsub("x","u", text_utf8)

将产生:' u'
R 4.3.0 changelog说:正则表达式函数现在可以更彻底地检查其输入是否是有效的字符串(在其编码中,例如UTF-8)。
您也可以将输入视为字节序列(这也将保留在输出中)。

gsub("x", "u", text, useBytes = TRUE)

给出'\xa0 u'

2wnc66cl

2wnc66cl2#

我刚刚遇到了一个旧脚本的问题,它将一些讨厌的编码从旧数据文件转换为UTF-8:
https://github.com/edonnachie/ICD10gm/blob/master/data-raw/dat_dimdi.R
解决方案是将useBytes = TRUE添加到gsub调用中。谢谢你的提示!
我不知道这是一个bug,还是只是由于行为改变而引起的烦恼。

相关问题