标题: [文件操作] 批处理如何转换文件编码为SJIS [打印本页]
作者: apocalypse 时间: 2019-12-18 19:28 标题: 批处理如何转换文件编码为SJIS
我需要遍历一个文件夹里的所有文件,然后把文件编码都转换为SJIS(ANSI),再去检索文件内容。
现在发现有三种编码,分别是 UTF-8、UTF-8 BOM、SJIS。。。。
实在是么得办法了,想请教一下各位大神,有什么好的方法。。。
我试过先加BOM,但是这样SJIS的文件就乱码了。先转成UTF-8,UTF-8的文件就乱码。
作者: terse 时间: 2019-12-18 22:40
powershell脚本 应该可以满足你
作者: apocalypse 时间: 2019-12-19 08:38
回复 2# terse
现在就是在批处理里用的powershell的代码,强制转的话,原来正确的编码会转成错的
作者: hlzj88 时间: 2019-12-19 12:51
https://www.jianshu.com/p/8828105802c4iconv可不可以解决,没有试。
作者: terse 时间: 2019-12-19 17:49
回复 3# apocalypse
不强制 先取源文件编码啊 然后再处理
作者: Batcher 时间: 2019-12-20 08:44
回复 3# apocalypse
请把你现在用的代码发出来看看如何修改
作者: nwm310 时间: 2019-12-24 11:29
本帖最后由 nwm310 于 2019-12-24 11:50 编辑
判斷 SJIS(ANSI)or UTF-8 or UTF-8 BOM
PowerShell 代碼- #932 shift_jis 936 gb2312 950 big5
- $ansi_codePage = 932
-
- $a1 = new-object System.Text.EncoderExceptionFallback
- $a2 = new-object System.Text.DecoderExceptionFallback
- $ansiEnc = [System.Text.Encoding]::GetEncoding($ansi_codePage, $a1, $a2)
- $utf8Enc = new-object System.Text.UTF8Encoding 0,1
- #====================
- foreach($file in dir *.txt){
- $fileEnc = 'unknown'
- if ($file.length -lt 3){"$file is too small"; continue }
-
- $bytes = [IO.File]::ReadAllBytes($file)
-
- if ('255 254' -eq $bytes[0..1]){
- $fileEnc = 'UTF-16 LE'
-
- }elseif('254 255' -eq $bytes[0..1]){
- $fileEnc = 'UTF-16 BE'
-
- }elseif('239 187 191' -eq $bytes[0..2]){
- $fileEnc = 'UTF-8 with BOM'
-
- }else{#========== ansi or utf-8 ================
- $isUTF8 = $isANSI = $true
- try {$ansiEnc.GetString($bytes) > $null} catch {$isANSI = $false}
- try {$utf8Enc.GetString($bytes) > $null} catch {$isUTF8 = $false}
-
- if ($isUTF8 -and !$isANSI){$fileEnc = 'UTF-8'}
- if (!$isUTF8 -and $isANSI){$fileEnc = 'ANSI'}
- if ($isUTF8 -and $isANSI){$fileEnc = 'ANSI and UTF-8'}
- }
-
- "$file is $fileEnc"
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |