Board logo

标题: [文件操作] 批处理如何转换文件编码为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 代碼
  1. #932 shift_jis    936 gb2312    950 big5
  2. $ansi_codePage = 932
  3. $a1 = new-object System.Text.EncoderExceptionFallback
  4. $a2 = new-object System.Text.DecoderExceptionFallback
  5. $ansiEnc = [System.Text.Encoding]::GetEncoding($ansi_codePage, $a1, $a2)
  6. $utf8Enc = new-object System.Text.UTF8Encoding  0,1
  7. #====================
  8. foreach($file in dir *.txt){
  9.     $fileEnc = 'unknown'
  10.     if ($file.length -lt 3){"$file is too small"; continue }
  11.     $bytes = [IO.File]::ReadAllBytes($file)
  12.     if ('255 254' -eq $bytes[0..1]){
  13.         $fileEnc = 'UTF-16 LE'
  14.     }elseif('254 255' -eq $bytes[0..1]){
  15.         $fileEnc = 'UTF-16 BE'
  16.    
  17.     }elseif('239 187 191' -eq $bytes[0..2]){
  18.         $fileEnc = 'UTF-8 with BOM'
  19.    
  20.     }else{#========== ansi or utf-8 ================
  21.         $isUTF8 = $isANSI = $true
  22.         try {$ansiEnc.GetString($bytes) > $null} catch {$isANSI = $false}
  23.         try {$utf8Enc.GetString($bytes) > $null} catch {$isUTF8 = $false}
  24.         if ($isUTF8 -and !$isANSI){$fileEnc = 'UTF-8'}
  25.         if (!$isUTF8 -and $isANSI){$fileEnc = 'ANSI'}
  26.         if ($isUTF8 -and $isANSI){$fileEnc =  'ANSI and UTF-8'}
  27.     }
  28.     "$file is $fileEnc"
  29. }
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2