powershell 批量转换文本文件编码(GBK转UTF-8)

it2022-05-06  5

powershell 批量转换文本文件编码(GBK转UTF-8)

01 前言02 正文03 后记

01 前言

手头有一批SQL文件,通过某程序批量更新到Local DB。但是发现导进去后中文变乱码(一堆????),而且日志里头insert语句中文已经变成乱码,想来应该是编码的问题。一看SQL文件,GBK(系统默认编码)编码,于是想统一改成UTF-8编码。又不想去找各种工具了,直接用Powershell搞搞了。

02 正文

刚开始直接用powershell的内置命令get-content 和 set-content是挺方便的,但是结果一看,GBK转到了UTF-8 BOM 编码,不是很满意。但是也贴出来作为参考吧。

@echo off powershell.exe -command "dir *.sql -R|foreach-object{(Get-Content $_.FullName -Encoding Default) | Set-Content $_.FullName -Encoding UTF8 };Write-Host '转换完成...'" pause

于是想到另外一个方法——.net。最后得到想要的UTF-8编码。

@echo off powershell.exe -command "dir *.sql -R|foreach-object{[void][System.IO.File]::WriteAllBytes($_.FullName,[System.Text.Encoding]::Convert([System.Text.Encoding]::GetEncoding('GBK'),[System.Text.Encoding]::UTF8,[System.IO.File]::ReadAllBytes($_.FullName)))};Write-Host '转换完成...'" pause

脚本使用说明

脚本在powershell 5.1下测试通过powershell脚本嵌入了CMD命令,所以另存为.bat,然后双击运行即可(递归遍历所有子目录,如果不需要,请将dir *.sql -R修改为dir *.sql)如果是其他文本格式如csv或txt,请将脚本中dir *.sql修改为dir *.csv 或 dir *.txt其他编码转换也可参考,做适当修改即可该脚本如果执行成功(不报错),请勿重复执行!否则可能会造成真的乱码。

03 后记

欢迎留言交流~ ---------END---------


最新回复(0)