2009-11-05 14 views
12

Qualcuno conosce uno strumento, preferibilmente per il menu di scelta rapida Explorer, per modificare ricorsivamente la codifica dei file in un progetto da ISO-8859-1 a UTF-8 e altre codifiche? Gratuito o non troppo costoso sarebbe fantastico.La codifica dei file cambia in modo ricorsivo su Windows?

Modifica: Grazie per le risposte, +1 per tutte. Ma mi piacerebbe molto essere in grado di fare clic con il tasto destro su una cartella e dire "convertire tutti i file .php in UTF-8". :) Ulteriori suggerimenti sono apprezzati, iniziando una taglia.

+0

ho bisogno di questo, anche, per un gruppo di file GB2312. Un'utilità che si traduce dal cinese all'inglese in modo ricorsivo sarebbe ancora meglio ... :) – endolith

risposta

23

Si potrebbe facilmente ottenere qualcosa di simile utilizzando Windows PowerShell. Se hai ottenuto il contenuto di un file, puoi inserirlo nel cmdlet Out-File specificando UTF8 come codifica.

provare qualcosa di simile:

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

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

Sembra Windows-1251 come valore di codifica non funziona – userlond

+0

In base alla [documentazione di powershell] (https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/set-content # -encoding), è possibile utilizzare solo una manciata di opzioni di codifica e windows- non è uno di questi. – MarthyM

4

non so circa dal menu contestuale, ma notepad++ consente di modificare le codifiche di file e ha una macro opzione ... così si potrebbe automatizzare il processo

+1

Sto provando a fare esattamente questo, ma per qualche motivo insano, le cose che fai nel menu Encoding non vengono salvate in macro! –

3

Si potrebbe scrivere il proprio in Python leggendo le risposte alle this question su recursing tra le directory, e this question sulla conversione dei file in UTF-8.

2

Se si importa un file test.reg avente la seguente contengono

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\"" 

Dopo questo riceverete la voce di menu "convertire tutti i file .php in UTF-8" nel menu contestuale di Explorer su ogni directory. Dopo aver scelto l'articolo, il programma batch C:\TEMP\t.cmd verrà avviato con la stringa "php" come primo parametro e il nome della directory quotata come secondo parametro (per il primo parametro "php" è possibile saltare se non è necessario). Il file t.cmd come

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

può essere utilizzata per dimostrare che tutto questo lavoro.

Così puoi decodificare i file * .php con qualsiasi strumento che preferisci. Ad esempio, è possibile utilizzare Windows PowerShell (vedere la risposta di Alan).

Se si desidera che l'estensione come PHP venga richiesta in aggiunta, è possibile scrivere un piccolo programma che visualizza la finestra di dialogo di input corrispondente e quindi avviare lo script di Windows PowerShell.

1

So che questa risposta è in ritardo, ma qui ci sono due app della linea di comando per convertire la codifica. Basta creare un wrapper di file batch per uno e aggiungerlo alla tua chiave * nel registro.

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

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

ho usato il stringconvertor aggiungendolo come un pulsante nel mio file-manager, FreeCommanderXE. Converte solo un file alla volta, ma posso cliccarne uno e premere il pulsante di conversione, quindi fare clic su quello successivo.

1

Ecco un bel convertitore ricorsiva ASP, è necessario IIS in esecuzione sul computer:

<!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> 
Problemi correlati