使用脚本/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 编码的主要内容,如果未能解决你的问题,请参考以下文章