2008-12-18 12 views
7

Tengo un archivo de texto que contiene cadenas de idioma localizadas actualmente codificadas en GB2312 (chino simplificado), pero todos mis otros archivos de idioma están en UTF-8. Me resulta muy difícil trabajar con este archivo, ya que ninguno de mis editores de texto funcionará correctamente con él y seguirá corrompiéndolo. ¿Hay alguna herramienta para convertir esto a UTF-8, y hay algún inconveniente para hacer esto? ¿Sería mejor mantenerlo como GB2312 y usar un editor diferente (si es así, puede recomendar uno)?Convertir GB2312 a UTF-8

Actualización: Estoy usando Windows XP (instalación en inglés).

Actualización n. ° 2: He intentado usar Notepad ++ y Notepad2 para editar los archivos GB2312, pero ninguno puede leer los archivos y corromperlos.

+0

Qué ambiente? Windows? Linux? –

+0

Lo sentimos, está en Windows XP (instalación en inglés). –

+1

Puede intentar escribir una utilidad java rápida/pequeña que lea el archivo en un String como GB2312 y luego lo vuelva a escribir como UTF-8. Eso debería funcionar. –

Respuesta

7

Puede probar este online service que usa la utilidad de código abierto iconv. También puede instalar Charco, una versión de línea de comandos en su máquina.

Para GB2312, puede usar CP936 como la codificación.

Si usted es un desarrollador de .Net, puede crear una pequeña herramienta que haga precisamente eso.
También he tenido problemas con esto y descubrí que en realidad era simple de resolver desde un punto de vista programático.

Todo lo que necesita es algo como esto (lo he probado y funciona):

En C#

static void Main(string[] args) { 
    string infile = args[0]; 
    string outfile = args[1]; 

    using (StreamReader sr = new StreamReader(infile, Encoding.GetEncoding(936))) { 
     using (StreamWriter sw = new StreamWriter(outfile, false, Encoding.UTF8)) { 
      sw.Write(sr.ReadToEnd()); 
      sw.Close(); 
     } 
     sr.Close(); 
    } 
} 

en VB.Net

Private Shared Sub Main(ByVal args() As String) 
    Dim infile As String = args(0) 
    Dim outfile As String = args(1) 
    Dim sr As StreamReader = New StreamReader(infile, Encoding.GetEncoding(936)) 
    Dim sw As StreamWriter = New StreamWriter(outfile, false, Encoding.UTF8) 
    sw.Write(sr.ReadToEnd) 
    sw.Close 
    sr.Close 
End Sub 
+0

¿Cómo sabes los mapas GB2312 para CP936? ¿Dónde puedo encontrar una tabla que relacione cada juego de caracteres con la página de códigos correspondiente para poder admitir cualquier idioma? –

2

GB 2312 es principalmente compatible con GB 18030, por lo que cualquier herramienta capaz de tratar con este último también debe tratar correctamente GB 2312. Hay muchas herramientas para convertir GB 18030 a UTF-8 (o algún otro formulario de codificación Unicode), pero no puedo recomendar ninguno específico para Windows, porque trabajo en Unix. Si quiere escribir un poco de código, le viene a la mente la biblioteca de iconv, o ICU: encontrará todas las conversiones disponibles en estas bibliotecas.

La conversión de GB 2312 a UTF-8 es completamente segura y sin pérdidas, no debe preocuparse por ello.

3

que podría estar pensando un poco demasiado simple aquí, pero si es sólo éste archivo de texto plano, puede probar lo siguiente:

  1. Reemplazar todo & por &amp;, todo < por &lt; y todos > por &gt; (para estar en el lado seguro)
  2. Anteponer lo siguiente al archivo de texto:

    <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body><pre>

  3. Abrir el archivo en su navegador favorito

  4. seleccionar y copiar todo el texto
  5. pegar en el Bloc de notas y guardar como UTF-8.

Habría terminado con esto antes de poder escribir cualquier código para hacer la conversión o descargar los programas que harían la conversión por usted.

Por supuesto, no estoy cien por ciento seguro de que esto funcionará, y su navegador necesitaría las fuentes correctas y todo, pero teniendo en cuenta que está trabajando con este tipo de archivos, estoy asumiendo que ya tiene esos .

Cuestiones relacionadas