Изменять кодировку файлов рекурсивно в 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 "• 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>