使用脚本/Windows 命令提示符将多个 CSV 文件转换为 UTF-8 编码

Posted

技术标签:

【中文标题】使用脚本/Windows 命令提示符将多个 CSV 文件转换为 UTF-8 编码【英文标题】:Convert multiple CSV files to UTF-8 encoding using a script/Windows Command prompt 【发布时间】:2020-11-05 04:17:14 【问题描述】:

我正在尝试创建一个脚本,将目录中的一组 CSV 文件(10-20 个文件)的编码转换为 UTF-8 编码。目前,我通过在 NotePad+ 中打开每个单独的文件,然后将编码切换为 UTF-8,然后重新保存来手动执行此操作。

是否有任何 Windows 命令或其他东西(我也安装了 Cygwin),我可以用来构建脚本来执行此操作?理想情况下,我希望脚本循环遍历目录中的每个 CSV 文件,并将其转换为 UTF-8。

提前感谢您的帮助!!!

【问题讨论】:

从哪个编码转换? 【参考方案1】:

您可以在 PowerShell 中轻松做到这一点

Get-Content filename.csv | Set-Content -Encoding utf8 filename-utf8.csv

对于您的循环,您需要将命令模块化到可以引用它们并正确调用它们的位置。在您的情况下,您需要调用“baseName”并将“.csv”附加到它之后,只需在 ForEach 循环中的正确位置使用正确的变量即可使其工作。

$a = Get-ChildItem
ForEach ($item in $a) 
  Get-Content $item.FullName | Set-Content -Encoding utf8 "$($item.Basename).csv.utf8"

请记住,在 Powershell 6 之前,Microsoft 包含 BOM(字节顺序标记)。在转换中放置在文件开头的三个字符。

转换需要创建一个附加文件,稍后您可以使用 mv 替换原始文件。

【讨论】:

【参考方案2】:

您没有指定要转换的内容,而是假设输入编码是 Windows-1252,尝试

for file in *.csv; do
    iconv -f cp-1252 <"$file" >"$file".tmp &&
    mv "$file.tmp" "$file"
done

这可能会使某些文件未转换(例如,如果输入文件包含源编码中未定义的字节),但在这种情况下不会覆盖源文件。 (也许禁用mv 逻辑,直到您可以看到它是否可以正常工作。)

【讨论】:

你标记了这个bash,所以我假设你对 Bash 足够熟悉,可以理解这一点。我猜 Cygwin 这些天包括iconv;如果没有,应该很容易找到和安装。

以上是关于使用脚本/Windows 命令提示符将多个 CSV 文件转换为 UTF-8 编码的主要内容,如果未能解决你的问题,请参考以下文章

运行多个 Powershell 命令并将结果导出到 csv

遍历多个 html 文件并转换为 csv

如何使用 Pandas 将多个 csv 文件中的单个数据列合并为一个?

用于拆分 .csv 文件的批处理文件

SqlServer2008R2使用SQLCMD执行多个脚本

Windows 7 命令提示符:如何从命令行执行批处理脚本?