2009-02-06 20 views
5

¿Sabe de qué manera podría programáticamente o mediante scrirpt transformar un conjunto de archivos de texto guardados en codificación de caracteres ansi, en codificación unicode?secuencia de comandos para guardar el archivo como unicode

Me gustaría hacer lo mismo que hago cuando abro el archivo con el bloc de notas y elijo guardarlo como un archivo Unicode.

+0

Duplicado de http://stackoverflow.com/questions/64860/best-way-to-convert-text-files-between-character-sets y también ver http://stackoverflow.com/questions/76482/powershell -setting-encoding-for-get-content-pipeline –

Respuesta

-1

Se puede utilizar iconv. En Windows, puede usarlo en Cygwin.

iconv -f from_encoding -t to_encoding file 
+3

¿Por qué la respuesta aceptada está relacionada con Cygwin? La pregunta está etiquetada como powershell ... – guillermooo

+0

Sí, al principio estaba buscando una solución Powershell, pero resulta que esto funcionó muy bien para mí y también pude usar Cygwin. De todos modos todas las respuestas dadas parecen ser enfoques válidos – river0

0

Utilice la clase System.IO.StreamReader (para leer el contenido del archivo) junto con la clase base System.Text.Encoding.Encoding (para crear el objeto del codificador que hace la codificación).

-1

pseudo código ...

Dim sistema, archivos, contenidos, newFile, archViejo

Const ForReading = 1, ForWriting = 2, ForAppending = 3 Const AnsiFile = -2, -1 = UnicodeFile

sistema Set = CreateObject ("Scripting.FileSystemObject ...

archivo Set = system.GetFile (" Text1.txt ")

Conjunto archViejo = file.OpenAsTextStream (ForReading, AnsiFile)

contenidos = oldFile.ReadAll()

oldFile.Close

system.CreateTextFile "Text1.txt"

conjunto de archivos de sistema = .GetFile ("Text1.txt")

Set newFile = file.OpenAsTextStream (ForWriting, UnicodeFile)

contenido newFile.Write

newFile.Close

Esperanza este enfoque funcionará ..

3

La manera más fácil sería Get-Content 'ruta/a/texto/archivo' | fuera de archivo 'nombre/de/archivo'.

Out-File has an -encoding parameter, el valor predeterminado es Unicode.

Si quería escritura de un lote de ellos, usted podría hacer algo como

$files = get-childitem 'directory/of/text/files' 
foreach ($file in $files) 
{ 
    get-content $file | out-file $file.fullname 
} 
0

Se puede crear un nuevo archivo de texto y escribir los bytes del archivo original en el nuevo, la colocación de un '\ 0 'antes de cada byte original (suponiendo que el archivo de texto original estuviera en inglés).

10

Esto podría funcionar para usted, pero notar que va a agarrar cada archivo en la carpeta actual:


Get-ChildItem | Foreach-Object { $c = (Get-Content $_); ` 
Set-Content -Encoding UTF8 $c -Path ($_.name + "u") } 

Lo mismo que el uso de alias para abreviar:


gci | %{ $c = (gc $_); sc -Encoding UTF8 $c -Path ($_.name + "u") } 

Steven Murawski sugiere usando Out-File en su lugar. Las diferencias entre ambos cmdlets son las siguientes:

  • Out-File intentará formatear la entrada que recibe.
  • Out-File La codificación predeterminada está basada en Unicode, mientras que Set-Content usa el valor predeterminado del sistema.

He aquí un ejemplo suponiendo que el archivo test.txt no existe en cualquiera de los casos:


PS> [system.string] | Out-File test.txt 
PS> Get-Content test.txt 

IsPublic IsSerial Name          BaseType   
-------- -------- ----          --------   
True  True  String         System.Object  

# test.txt encoding is Unicode-based with BOM 


PS> [system.string] | Set-Content test.txt 
PS> Get-Content test.txt 

System.String 

# test.txt encoding is "ANSI" (Windows character set) 

De hecho, si usted no necesita ninguna codificación Unicode específica, que podría así hacer las siguientes condiciones para convertir un archivo de texto a Unicode:


PS> Get-Content sourceASCII.txt > targetUnicode.txt 

Out-File es un "operador de redirección con optiona l parámetros "de tipo.

Cuestiones relacionadas