R语言readLines读取Android Top命令输出文件不全问题求助
解决R读取Android Top导出文件时中途终止的问题
核心问题是编码解析错误导致的读取中断:原文件里的[0më是ANSI控制字符+损坏的编码字节组合,readLines按文本模式读取时,会将无法正确解析的编码序列误判为终止信号,导致只读取部分内容。
解决方案1:二进制模式读取,绕过编码问题
直接以二进制方式读取整个文件的原始字节,再转换为字符,完全避免编码解析中断:
file_path <- file.path(folder, file) # 读取全部原始字节 raw_data <- readBin(file_path, "raw", file.info(file_path)$size) # 转换为字符(用Latin1编码保留所有字节,避免丢失) full_text <- rawToChar(raw_data, encoding = "Latin1") # 按换行分割成行 all_lines <- strsplit(full_text, "\n")[[1]] # 写入文件(useBytes=TRUE避免再次编码问题) writeLines(all_lines, file.path(folder, "Read_File_1.txt"), useBytes = TRUE)
解决方案2:读取后清理ANSI控制字符(可选)
如果需要清理文件里的ANSI终端控制符(比如光标移动、颜色重置等),可以用正则表达式批量移除:
# 移除所有ANSI转义序列 clean_lines <- gsub("\\x1b\\[[0-9;]*[a-zA-Z]", "", all_lines) # 写入清理后的文件 writeLines(clean_lines, file.path(folder, "Cleaned_Read_File.txt"), useBytes = TRUE)
关键说明
- 原
readLines默认依赖系统本地编码解析文本,遇到损坏的编码字节时会提前终止读取;二进制读取直接获取所有原始数据,不会被编码问题中断。 - 如果知道文件的实际编码(比如UTF-8),可以把
rawToChar里的encoding参数改成对应编码,但Latin1是最安全的选择——它会保留每一个字节,不会出现字符丢失或解析错误。
内容的提问来源于stack exchange,提问作者Darth Ratus
相关产品推荐
相关产品推荐

