【问题标题】:Change files' encoding recursively on Windows?在 Windows 上递归更改文件的编码?
【发布时间】:2010-12-13 11:40:05
【问题描述】:

是否有人知道一种工具,最好是用于资源管理器上下文菜单的工具,可以递归地将项目中文件的编码从 ISO-8859-1 更改为 UTF-8 和其他编码?免费软件或不太贵的软件都很棒。

编辑:感谢您的回答,+1。但我真的希望能够右键单击一个文件夹并说“将所有 .php 文件转换为 UTF-8”。 :) 进一步的建议表示赞赏,开始赏金。

【问题讨论】:

  • 我也需要这个,用于一堆 GB2312 文件。一个将中文递归翻译成英文的实用程序会更好...... :)

标签: windows unicode utf-8


【解决方案1】:

您可以使用 Windows PowerShell 轻松实现类似的目标。如果您获得了文件的内容,则可以将其通过管道传输到指定 UTF8 作为编码的 Out-File cmdlet。

尝试类似:

Get-ChildItem *.txt -Recurse | ForEach-Object {
$content = $_ | Get-Content

Set-Content -PassThru $_.Fullname $content -Encoding UTF8 -Force}  

【讨论】:

  • 似乎 windows-1251 编码值不起作用
  • 根据powershell documentation,您只能使用少数几种编码选项,而windows-不是其中之一。
  • @userlond 尝试默认
  • 也许值得注意的是它是带有 BOM 的 UTF-8。
【解决方案2】:

我从上下文菜单中不知道,但notepad++ 允许您更改文件编码并且它有一个宏选项...因此您可以自动化该过程

【讨论】:

  • 我正试图这样做,但出于某种疯狂的原因,您在“编码”菜单中执行的操作不会保存在宏中!
【解决方案3】:

如果您导入具有以下内容的test.reg 文件

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\ConvertPHP]
@="convert all .php files to UTF-8"

[HKEY_CLASSES_ROOT\Directory\shell\ConvertPHP\command]
@="cmd.exe /c C:\\TEMP\\t.cmd php \"%1\""

在此之后,您将在每个目录的资源管理器的上下文菜单中收到菜单项“将所有 .php 文件转换为 UTF-8”。选择项目后,批处理程序C:\TEMP\t.cmd将以“php”字符串作为第一个参数和引用的目录名称作为第二个参数启动(因为第一个参数“php”如果不需要可以跳过)。文件t.cmd点赞

echo %1>C:\TEMP\t.txt
echo %2>>C:\TEMP\t.txt

可以用来证明所有这些工作。

因此您可以使用您喜欢的任何工具解码 *.php 文件。例如,您可以使用 Windows PowerShell(请参阅 Alan 的答案)。

如果您希望额外询问 PHP 等扩展,您可以编写一个小程序,显示相应的输入对话框,然后启动 Windows PowerShell 脚本。

【讨论】:

    【解决方案4】:

    这是一个不错的 ASP 递归转换器,您需要在您的计算机上运行 IIS:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <HTML>
    <HEAD>
    <TITLE>Charset Converter - TFI 13/02/2015</TITLE>
    </HEAD>
    <BODY style='font-family:arial;font-size:11px;color:white;background-color:#7790c4;font-size:15px'>
    <H1 style='color:yellow'>Recursive file charset converter</H1>
    by TFI 13/02/2015<BR><BR>
    <%
    totalconverted=0
    
    Function transcoder( ANSIFile)
       UFT8FileOut=ANSIFile&".tempfile" 
       Set oFS    = CreateObject( "Scripting.FileSystemObject" )
       Set oFrom  = CreateObject( "ADODB.Stream" )
       sFFSpec    = oFS.GetAbsolutePathName(ANSIFile)
       Set oTo    = CreateObject( "ADODB.Stream" )
       sTFSpec    = oFS.GetAbsolutePathName(UFT8FileOut)
       oFrom.Type    = 2 'adTypeText
       oFrom.Charset = fromchar '"Windows-1252"
       oFrom.Open
       oFrom.LoadFromFile sFFSpec
       oTo.Type    = 2 'adTypeText
       oTo.Charset = tochar '"utf-8"
       oTo.Open
       oTo.WriteText oFrom.ReadText
       oTo.SaveToFile sTFSpec,2
       oFrom.Close
       oTo.Close
       oFS.DeleteFile sFFSpec
       oFS.MoveFile sTFSpec,sFFSpec
    End Function
    
    Function ConvertFiles(objFolder, sExt, bRecursive, fromchar, tochar)
        Dim objFile, objSubFolder
        For each objFile in objFolder.Files
            If Ucase(fso.GetExtensionName(objFile)) = ucase(sExt) Then
                transcoder objFile.path
                totalconverted=totalconverted+1
                response.write "&bull; Converted <B>"&fso.GetAbsolutePathName(objFile)&"</B> from <B>"&fromchar&"</B> to <B>"&tochar&"</B><BR>"
            End If
        Next
    
        If bRecursive = true then
            For each objSubFolder in objFolder.Subfolders
                ConvertFiles objSubFolder, sExt, true, fromchar, tochar
            Next
        End If
    End Function
    
    sFolder=request.form("sFolder")
    sExtension=request.form("sExtension")
    fromchar=request.form("fromchar")
    tochar=request.form("tochar")
    sSubs=request.form("sSubs")
    if sSubs="1" then
        sub1=True
    else
        sub1=false
    end if  
    
    if len(sExtension)=0 then sExtension="asp"
    if len(sFolder)>0 and len(fromchar)>0 and len(tochar)>0 then
    
        Dim fso, folder, files, NewsFile, sFolder, objFSO, strFileIn, strFileOut
        Set fso = CreateObject("Scripting.FileSystemObject")
        'sFolder = "C:\inetpub\wwwroot\naoutf8"
        ConvertFiles fso.GetFolder(sFolder), sExtension, Sub1, fromchar, tochar
        response.write "<hr><br>Total files converted: "&totalconverted&"<BR><BR>New conversion?<br><br>"
    end if
    %>  
    <FORM name=ndata method=post action="UTF8converter.asp">
    <TABLE cellspacing=0 cellpadding=5>
    <TR>
        <TD>Folder to process:</TD>
        <TD><INPUT name=sFolder style='width:350px' placeholder="C:\example"></TD>
    </TR>   
    <TR>
        <TD>Extension:</TD>
        <TD><INPUT name=sExtension style='width:50px' value='asp'> (default is .asp)</TD>
    </TR>
    <TR>
        <TD>Process subfolders:</TD>
        <TD><INPUT type=checkbox name=sSubs value='1' checked></TD>
    </TR>
    <TR>
        <TD>From charset:</TD>
        <TD><select name=fromchar>
        <option value="big5">charset=big5 - Chinese Traditional (Big5)
        <option value="euc-kr">charset=euc-kr - Korean (EUC)
        <option value="iso-8859-1">iso-8859-1 - Western Alphabet
        <option value="iso-8859-2">iso-8859-2 - Central European Alphabet (ISO)
        <option value="iso-8859-3">iso-8859-3 - Latin 3 Alphabet (ISO)
        <option value="iso-8859-4">iso-8859-4 - Baltic Alphabet (ISO)
        <option value="iso-8859-5">iso-8859-5 - Cyrillic Alphabet (ISO)
        <option value="iso-8859-6">iso-8859-6 - Arabic Alphabet (ISO)
        <option value="iso-8859-7">iso-8859-7 - Greek Alphabet (ISO)
        <option value="iso-8859-8">iso-8859-8 - Hebrew Alphabet (ISO)
        <option value="koi8-r">koi8-r - Cyrillic Alphabet (KOI8-R)
        <option value="shift-jis">shift-jis - Japanese (Shift-JIS)
        <option value="x-euc">x-euc - Japanese (EUC)
        <option value="utf-8">utf-8 - Universal Alphabet (UTF-8)
        <option value="windows-1250">windows-1250 - Central European Alphabet (Windows)
        <option value="windows-1251">windows-1251 - Cyrillic Alphabet (Windows)
        <option value="windows-1252" selected>windows-1252 - Western Alphabet (Windows)
        <option value="windows-1253">windows-1253 - Greek Alphabet (Windows)
        <option value="windows-1254">windows-1254 - Turkish Alphabet
        <option value="windows-1255">windows-1255 - Hebrew Alphabet (Windows)
        <option value="windows-1256">windows-1256 - Arabic Alphabet (Windows)
        <option value="windows-1257">windows-1257 - Baltic Alphabet (Windows)
        <option value="windows-1258">windows-1258 - Vietnamese Alphabet (Windows)
        <option value="windows-874">windows-874 - Thai (Windows)
        </select></TD>
    </TR>
    <TR>
        <TD>To charset:</TD>
        <TD><select name=tochar>
        <option value="big5">big5 - Chinese Traditional (Big5)
        <option value="euc-kr">euc-kr - Korean (EUC)
        <option value="iso-8859-1">iso-8859-1 - Western Alphabet
        <option value="iso-8859-2">iso-8859-2 - Central European Alphabet (ISO)
        <option value="iso-8859-3">iso-8859-3 - Latin 3 Alphabet (ISO)
        <option value="iso-8859-4">iso-8859-4 - Baltic Alphabet (ISO)
        <option value="iso-8859-5">iso-8859-5 - Cyrillic Alphabet (ISO)
        <option value="iso-8859-6">iso-8859-6 - Arabic Alphabet (ISO)
        <option value="iso-8859-7">iso-8859-7 - Greek Alphabet (ISO)
        <option value="iso-8859-8">iso-8859-8 - Hebrew Alphabet (ISO)
        <option value="koi8-r">koi8-r - Cyrillic Alphabet (KOI8-R)
        <option value="shift-jis">shift-jis - Japanese (Shift-JIS)
        <option value="x-euc">x-euc - Japanese (EUC)
        <option value="utf-8" selected>utf-8 - Universal Alphabet (UTF-8)
        <option value="windows-1250">windows-1250 - Central European Alphabet (Windows)
        <option value="windows-1251">windows-1251 - Cyrillic Alphabet (Windows)
        <option value="windows-1252">windows-1252 - Western Alphabet (Windows)
        <option value="windows-1253">windows-1253 - Greek Alphabet (Windows)
        <option value="windows-1254">windows-1254 - Turkish Alphabet
        <option value="windows-1255">windows-1255 - Hebrew Alphabet (Windows)
        <option value="windows-1256">windows-1256 - Arabic Alphabet (Windows)
        <option value="windows-1257">windows-1257 - Baltic Alphabet (Windows)
        <option value="windows-1258">windows-1258 - Vietnamese Alphabet (Windows)
        <option value="windows-874">windows-874 - Thai (Windows)
        </select></TD>
    </TR>
    </TABLE><BR>
        <INPUT TYPE=BUTTON onClick='if(document.ndata.sFolder.value.length>0)document.ndata.submit()'value='Convert folder and subfolders'>
    </FORM> 
    </BODY>
    </HTML>
    

    【讨论】:

      【解决方案5】:

      我知道这个答案是迟来的,但这里有两个命令行应用程序来转换编码。只需为其中一个批处理文件包装器,然后将其添加到注册表中的 * 键。

      http://www.autohotkey.com/forum/topic10796.html

      http://www.gbordier.com/gbtools/stringconverter.htm

      我使用 stringconvertor,将它作为一个按钮添加到我的文件管理器 FreeCommanderXE 中。它一次只转换一个文件,但我可以单击一个文件,然后按下转换按钮,然后单击下一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        相关资源
        最近更新 更多