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

是否使用Powershell从.csv文件中删除非英语单词/字符?,powershell,character-encoding,export-to-csv,Powershell,Character Encoding,Export To Csv,我已经将一个物联网数据集(IoT dataset)从他们的网站上收集内容导出到一个.csv文件中(我们称之为data.csv)。其中一些内容是用日语/汉语/各种欧洲语言编码的,当我导入它的程序检测到这些特殊字符时,它会拒绝打开 是否有任何方法可以使用PowerShell从csv中删除任何和所有非英语编码并将其作为副本导出?我的意思是,保留a-z、a-z、0-9、逗号、问号、括号等,但从数据集中删除任何非英语的内容 我尝试将文件保存为记事本中的utf-8编码,但没有解决问题。通过字符十六进制值匹配

我已经将一个物联网数据集(IoT dataset)从他们的网站上收集内容导出到一个.csv文件中(我们称之为data.csv)。其中一些内容是用日语/汉语/各种欧洲语言编码的,当我导入它的程序检测到这些特殊字符时,它会拒绝打开

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


我尝试将文件保存为记事本中的utf-8编码,但没有解决问题。

通过字符十六进制值匹配的正则表达式可以工作。天真的做法是用一个有效的字符替换任何无效字符。通常使用
-
作为这样的字符

作为样本数据,考虑一些含有日语和欧洲字母的废话CSV。

id,data
1,Lorem内ょへconsectetur  
2,ipsum 球経風adipiscing
3,dolor 
4,sitåäöèelit
5,amet
将文件作为CSV导入,循环并用破折号替换每个非ASCII字符。正则表达式
[^\x00-\x7A]
将匹配十六进制值为00到122的字符,或者,
nul
z
的字符。根据您的用例,相应地调整范围。这样,

$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-へ

输出将只剥离汉字,因此将有三个元素包含
传感器--
。如果这样做不好,请决定非ASCII字符需要何种转换。将值转换为普通十六进制?完全跳过这些?翻译成拉丁字母?

虽然我从来没有用过它。。。dotnet中的规范化内容可以从PoSh调用。它可以将带有重音/变音标记的字符和多字节字符映射为ascii。你确定问题出在字符,而不仅仅是解码吗?文件使用哪种字符编码?你能告诉你的节目吗?(即使在使用PowerShell读取文件时,您也必须这样做。)或者,您的程序是否可以改为读取xlsx或ods?在导入-异常设置“data”之后运行该行时,我一直遇到此错误:“在此对象上找不到属性“data”。请验证该属性是否存在并且可以设置。”我不介意丢失关于这些非英语字符的信息(也希望保留逗号、标点符号等)。非常感谢你帮助我,我真的很感激@JsDart表示您的CSV具有与我的示例不同的列名。将
$\.data
更改为列的名称。