如何解决R爬取ASP.NET网站返回原始向量中嵌入NUL字符的问题
问题原因
你遇到的报错并非文件损坏导致,返回的reporte_nacido原始内容实际是带BOM的UTF-16LE编码文本:该编码下每个字符占2个字节,ASCII字符的第二个字节固定为0x00(也就是报错里提到的NUL字符),直接调用rawToChar就会触发嵌入NUL的校验错误。
推荐解决方法(无需手动删除字符,避免乱码)
直接通过编码转换处理原始向量,会自动适配双字节结构、过滤BOM:
# 合并为单个raw向量 raw_vec <- as.vector(unlist(reporte_nacido)) # 从UTF-16LE编码转换为UTF-8文本 content_str <- iconv(list(raw_vec), from = "UTF-16LE", to = "UTF-8")
转换完成后可以直接读取制表符分隔的CSV内容:
# 读取为数据框 df <- read.delim(text = content_str, sep = "\t")
备选方案:手动删除NUL字符(仅适合临时快速处理)
如果不需要考虑特殊字符的编码正确性,可以直接过滤掉原始向量里的NUL字节再转换:
raw_vec <- as.vector(unlist(reporte_nacido)) # 过滤所有值为0的原始字节 filtered_vec <- raw_vec[raw_vec != as.raw(0)] content_str <- rawToChar(filtered_vec)
内容的提问来源于stack exchange,提问作者Andres Mora
相关产品推荐
相关产品推荐

