Изменять кодировку файлов рекурсивно в Windows?

Кто-нибудь знает инструмент, желательно в контекстном меню Проводника, для рекурсивного изменения кодировки файлов в проекте от ISO-8859-1 до UTF-8 и других кодировок? Freeware или не слишком дорого стоило бы.

Изменить: Спасибо за ответы, +1 за все. Но мне бы очень хотелось иметь возможность просто щелкнуть правой кнопкой мыши папку и сказать "конвертировать все .php файлы в UTF-8".:) Дальнейшие предложения приветствуются, начиная награду.

Ответ 1

Вы легко можете добиться чего-то подобного с помощью Windows PowerShell. Если у вас есть контент для файла, вы можете передать его в командлет Out-File, указав UTF8 в качестве кодировки.

Попробуйте что-то вроде:

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

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

Ответ 2

Я не знаю из контекстного меню, но notepad ++ позволяет вам изменять кодировки файлов и имеет опцию макроса., поэтому вы можете автоматизировать процесс

Ответ 3

Вы можете написать свой собственный в Python, прочитав ответы на этот вопрос о рекурсии через каталоги и этот вопрос о преобразовании файлов в UTF-8.

Ответ 4

Если вы импортируете файл 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 (см. Ответ Алана).

Если вы хотите, чтобы расширение, подобное PHP, было запрошено дополнительно, вы можете написать небольшую программу, которая отобразит соответствующий диалог ввода, а затем запустите Windows PowerShell script.

Ответ 5

Я знаю, что этот ответ подходит к концу, но вот два приложения командной строки для преобразования кодировки. Просто создайте пакетный файл для одного и добавьте его в свой * ключ в реестре.

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

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

Я использовал stringconvertor, добавив его в качестве кнопки в моем файловом менеджере FreeCommanderXE. Он преобразует только один файл за раз, но я могу щелкнуть по нему и нажать кнопку конвертирования, а затем щелкнуть дальше.

Ответ 6

Здесь хороший рекурсивный конвертер 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>