You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中读取文本文件并过滤非英文字符行

问题描述

有一个.txt文件内容如下:

*** Header Start ***
਍嘀攀爀猀椀漀渀倀攀爀猀椀猀琀㨀 ㄀ഀഀ
LevelName: Session
਍䰀攀瘀攀氀一愀洀攀㨀 䈀氀漀挀欀ഀഀ
LevelName: Trial
਍䰀攀瘀攀氀一愀洀攀㨀 匀甀戀吀爀椀愀氀ഀഀ
LevelName: LogLevel5
਍䰀攀瘀攀氀一愀洀攀㨀 䰀漀最䰀攀瘀攀氀㘀ഀഀ
LevelName: LogLevel7
਍䰀攀瘀攀氀一愀洀攀㨀 䰀漀最䰀攀瘀攀氀㠀ഀഀ

需要读取文件并移除所有含乱码的行,仅保留英文行作为数据框的一列。但使用read.table、readLines、scan或read_delim读取时,因乱码出现如下异常输出:

[1] "ÿþ*" "H"   "S"   "*"   "\n"  "V"   "1"   "\n"  "L"   "S"   "\n"  "L"   "B"   "\n"  "L"   "T"   "\n" 
  [18] "L"   "S"   "\n"  "L"   "L"   "\n"  "L"   "L"   "\n"  "L"   "L"   "\n"  "L"   "L"   "\n"  "L"   "L"  
  [35] "\n"  "L"   "L"   "\n"  "E"   "G"   "\n"  "S"   "0"   "\n"  "S"   "1"   "\n"  "S"   "8"   "4"   "P"  
  [52] "\n"  "S"   "9"   "\n"  "S"   "1"   "\n"  "D"   "G"   "\n"  "R"   "-"   "\n"  "G"   "1"   "\n"  "D"  

如何无需手动删除乱码行解决该问题?

解决方案
  1. 指定正确编码读取文件
    输出开头的ÿþ是UTF-16LE编码的BOM(字节顺序标记),读取时指定对应编码可避免字符被拆分:

    lines <- readLines("your_file.txt", encoding = "UTF-16LE")
    
  2. 过滤乱码行
    使用正则表达式筛选仅包含ASCII字符的行,排除含非ASCII乱码的内容,同时移除空行:

    clean_lines <- lines[grepl("^[[:ascii:]]+$", lines) & lines != ""]
    
  3. 转换为数据框
    将清理后的行转为数据框的一列:

    # Base R 实现
    df <- data.frame(Level_Info = clean_lines, stringsAsFactors = FALSE)
    
    # Tidyverse 实现(需先加载tibble包)
    library(tibble)
    df <- tibble(Level_Info = clean_lines)
    

最终结果

处理后的数据框仅保留以下有效行:

*** Header Start ***
LevelName: Session
LevelName: Trial
LevelName: LogLevel5
LevelName: LogLevel7

内容的提问来源于stack exchange,提问作者jc2525

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:35:26