使用Powershell从.csv文件中删除非英语单词/字符吗?

时间:2019-04-12 03:45:58

标签: powershell character-encoding export-to-csv

我已经将物联网数据集和其网站上的内容抓取到了一个.csv文件(我们将其称为data.csv)中。其中某些内容以日语/中文/多种欧洲语言编码,当我导入该程序的程序检测到这些特殊字符之一时,拒绝打开。

是否可以使用PowerShell从csv中删除所有非英语编码并将其导出为副本?我的意思是,保留a-z,A-Z,0-9,逗号,问号,方括号等,但是从数据集中删除非英语的内容吗?

我尝试从记事本中将文件另存为utf-8编码,但这并不能解决问题。

1 个答案:

答案 0 :(得分:1)

按字符的十六进制值匹配的正则表达式可以工作。天真的方法是用有效的字符替换任何无效字符。通常将-用作此类字符

作为样本数据,请考虑一些包含日语和欧洲字母åäöè的废话CSV:

id,data
1,Lorem内ょへconsectetur  
2,ipsum 球経風adipiscing
3,dolor 
4,sitåäöèelit
5,amet

将文件导入为CSV,循环浏览并用破折号替换每个非ASCII字符。正则表达式[^\x00-\x7A]将匹配十六进制值为00到122或nulz的字符。根据您的用例,相应地调整范围。像这样

$data = Import-Csv C:\temp\mixed.csv

$data | % {
    $_.data = $_.data -replace "[^\x00-\x7A]","-"
}

$data

# Output
id data
-- ----
1  Lorem---consectetur
2  ipsum ---adipiscing
3  dolor
4  sit-----elit
5  amet

此方法有一个很大的缺点:它会丢失信息。考虑以下数据:

1,sensor-内
2,sensor-ょ
3,sensor-へ

输出将仅去除汉字,因此将包含三个包含sensor--的元素。如果那不好,请确定非ASCII字符需要哪种转换。将值转换为普通十六进制?完全跳过那些?音译成拉丁字母?