R语言iconv()转换含特殊字符的UTF-8字符串为ASCII时返回NA如何解决
问题原因
- 从文件读取的
s1存在两类异常:一是包含不可见控制字符/零宽字符,这类字符没有对应的ASCII音译规则;二是存在无效UTF-8字节序列,iconv默认遇到无法解析/转换的内容时会直接返回NA。手动输入的s4是纯合法UTF-8文本,无异常字符,因此可以正常转换。
解决方案
不需要修改源文件,只需要调整转换逻辑即可:
方案1:直接修改iconv参数
给iconv添加sub参数,指定无法转换的字符的替换规则,设置为空字符串就会自动删除异常内容,不会返回NA:
s1 <- iconv(s1, from = "UTF-8", to = "ASCII//TRANSLIT", sub = "")
如果需要标记被替换的内容,可以把sub的值改为"?"之类的占位符。
方案2:先清理异常字符再转换
如果担心直接删除会影响正常内容,可以先对字符串做预处理,清除不可见的控制字符、无效字节后再做转换:
# 第一步:清除所有非打印字符、控制字符 s1_clean <- gsub("[^[:print:]]", "", s1) # 第二步:强制转为合法UTF-8格式,处理异常字节 s1_utf8 <- enc2utf8(s1_clean) # 第三步:转ASCII s1 <- iconv(s1_utf8, to = "ASCII//TRANSLIT")
内容的提问来源于stack exchange,提问作者LBes
相关产品推荐
相关产品推荐

