在我看来,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 体是哪些字符失败,因为我正在处理的真实的字符串太长而无法检查。
2条答案
按热度按时间ht4b089n1#
这是一个编码问题,
text
没有被解释为有效的字符串,因为它包含非ASCII字符。转换为UTF-8:
将产生:
' u'
。R 4.3.0 changelog说:正则表达式函数现在可以更彻底地检查其输入是否是有效的字符串(在其编码中,例如UTF-8)。
您也可以将输入视为字节序列(这也将保留在输出中)。
给出
'\xa0 u'
2wnc66cl2#
我刚刚遇到了一个旧脚本的问题,它将一些讨厌的编码从旧数据文件转换为UTF-8:
https://github.com/edonnachie/ICD10gm/blob/master/data-raw/dat_dimdi.R
解决方案是将
useBytes = TRUE
添加到gsub调用中。谢谢你的提示!我不知道这是一个bug,还是只是由于行为改变而引起的烦恼。