[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何转换文件编码为SJIS

我需要遍历一个文件夹里的所有文件,然后把文件编码都转换为SJIS(ANSI),再去检索文件内容。
现在发现有三种编码,分别是 UTF-8、UTF-8 BOM、SJIS。。。。
实在是么得办法了,想请教一下各位大神,有什么好的方法。。。

我试过先加BOM,但是这样SJIS的文件就乱码了。先转成UTF-8,UTF-8的文件就乱码。

本帖最后由 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. }
复制代码

TOP

回复 3# apocalypse


    请把你现在用的代码发出来看看如何修改
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# apocalypse
不强制 先取源文件编码啊 然后再处理

TOP

https://www.jianshu.com/p/8828105802c4iconv可不可以解决,没有试。
目的,学习批处理

TOP

回复 2# terse


    现在就是在批处理里用的powershell的代码,强制转的话,原来正确的编码会转成错的

TOP

powershell脚本 应该可以满足你

TOP

返回列表