在R语言中移除字符串中十六进制代码的问题求助
解决Word转TXT后R中出现的<92>乱码问题
这问题我遇过好多次了,根源是编码不匹配导致的乱码,咱们一步步来解决:
1. 从根源解决:读取时指定正确编码
Word导出的TXT文件默认使用Windows-1252编码(尤其是包含特殊引号、智能引号这类字符时),而R默认读取编码可能和它不匹配,导致原本的单引号(’)被解析成了\x92,在R里显示为<92>。
修改你的读取代码,加上encoding参数指定正确编码:
df <- read_delim("file.txt", "\n", escape_double = FALSE, col_names = FALSE, trim_ws = TRUE, encoding = "Windows-1252")
这样读取后,特殊字符会被正确识别,不会出现<92>这类异常显示了。如果Windows-1252无效,可以试试"ISO-8859-1",这两个编码对这类特殊字符的处理几乎一致。
2. 修复已读取数据中的乱码
如果已经读取了数据,不想重新读取,可以直接替换实际存储的异常字符(注意:你看到的<92>是R对不可打印字符的显示形式,实际存储的是单个\x92字符,所以用gsub("<92>", ...)是匹配不到的):
方法1:用基础R的gsub替换
# 将\x92替换为普通单引号 df$comments <- gsub("\x92", "'", df$comments)
方法2:用stringi包更稳妥(适合多编码问题)
如果还有其他类似的编码乱码,stringi包的处理更可靠:
library(stringi) df$comments <- stri_replace_all_fixed(df$comments, "\x92", "'")
3. 为什么替换其他内容会出现方框问号?
这是因为编码不匹配时,字符在内存中是以错误的编码形式存储的。当你对这类字符串进行修改操作时,R尝试重新编码无法识别的字符,就会用方框问号作为占位符显示。解决了读取时的编码问题,这个现象就会消失。
内容的提问来源于stack exchange,提问作者J.Sabree
相关产品推荐
相关产品推荐

