2011-08-31 53 views
52

Tengo un sitio web y puedo enviar mis caracteres turcos con jQuery en Firefox, pero Internet Explorer no envía mis caracteres turcos. Miré mi archivo fuente en el bloc de notas, y la página de códigos de este archivo es ANSI.¿Cómo convierto un archivo codificado ANSI a UTF-8 con Notepad ++?

Cuando lo convierto en UTF-8 sin BOM y cierro el archivo, el archivo vuelve a ser ANSI cuando vuelvo a abrir.

¿Cómo puedo convertir mi archivo de ANSI a UTF-8?

+1

Puedes usar la herramienta que escribí para que , También sufrí el mismo problema e hice mi propia salida. https://github.com/srcnalt/ANSI-to-UTF8 – Sarge

Respuesta

60

En cuanto a esta parte:

Cuando me convierto en UTF-8 sin BOM y cerrar el archivo, el archivo es nuevo ANSI cuando me abro de nuevo.

La solución más fácil es evitar el problema por completo configurando Notepad ++.

Trate Settings ->Preferences ->New document ->Encoding -> elija UTF-8 sin BOM, y comprobar Apply to opened ANSI files.

De esta forma, todos los archivos ANSI abiertos se tratarán como UTF-8 sin BOM.

Para una explicación de lo que está sucediendo, lea los comentarios debajo de esta respuesta.

Para obtener información completa sobre Unicode y UTF-8, lea this excellent article de Joel Spolsky.

+0

Eso me ayudó mucho. Gracias. Aunque no entiendo el comportamiento. Porque abro un archivo existente y no uno nuevo. –

+1

El 'Aplicar a archivos ANSI abiertos' es relevante en su situación: cuando tiene un archivo que contiene solo caracteres ASCII simples (sin acentos, etc.), y no tiene lista de materiales al comienzo del archivo, entonces el editor de forma predeterminada lo trata como un archivo ANSI, porque no hay nada en este archivo que indique que es posible que desee tratar un archivo UTF-8. Sin embargo, cuando agrega, digamos, 'Ö' y lo guarda como UTF-8 sin BOM, aunque no haya BOM al principio del archivo, de la presencia de un combo de dos bytes detrás de' Ö' (0xC396 en este caso) el editor aprende "esto tiene que ser UTF-8". –

+2

En otras palabras, cuando guarda el archivo plano ANSI como UTF-8, la salida es idéntica a la que tenía que guardar como ANSI. Debe decirle al editor que * lo trate * como UTF-8 cuando lo abra. Para que el archivo * sea * UTF-8, debe comenzar con una lista de materiales o contener ciertas secuencias de dos bytes. El comportamiento del editor cuando ingresa 'Ö' en un archivo ANSI depende de la configuración. –

13

Si no tiene caracteres no ASCII (puntos de código 128 y superiores) en su archivo, UTF-8 sin BOM es lo mismo que ASCII, byte para byte, por lo que Notepad ++ adivinará mal.

Lo que debe hacer es especificar la codificación de caracteres al publicar la respuesta de AJAX - por ejemplo, con PHP, que haría esto:

header('Content-Type: application/json; charset=utf-8'); 

La parte importante es especificar el conjunto de caracteres con cada respuesta JS - cosa IE caerá de nuevo a la codificación por defecto del sistema del usuario, lo que está mal la mayor parte del tiempo.

+0

¿Por qué no es esta la respuesta aceptada? Es la única respuesta que explica lo que está sucediendo y cuál es la verdadera solución a la pregunta. – SinistraD

39

Quizás esta no sea la respuesta que necesitabas, pero encontré un problema similar, así que decidí ponerlo aquí.

Necesitaba convertir 500 archivos xml a UTF8 a través de Notepad ++. ¿Por qué Notepad ++? Cuando utilicé la opción "Codificar en UTF8" (muchos otros convertidores usan la misma lógica) dañó todos los caracteres especiales, así que tuve que usar "Convertir a UTF8" explícitamente.


Aquí algunos sencillos pasos para convertir varios archivos a través de Notepad ++ sin estropear con caracteres especiales (por ej. Los signos diacríticos).

  1. Run Notepad ++ y luego abrir menú Plugins-> Plugin Manager-> Mostrar administrador de complementos
  2. Instalar Python script. Cuando se instala el complemento, reinicie la aplicación .
  3. Elija el menú Complementos-> Python Script-> Nueva secuencia de comandos.
  4. Elija su nombre, y luego pasado el código siguiente:

convertToUTF8.py

import os 
import sys 
from Npp import notepad # import it first! 

filePathSrc="C:\\Users\\" # Path to the folder with files to convert 
for root, dirs, files in os.walk(filePathSrc): 
    for fn in files: 
     if fn[-4:] == '.xml': # Specify type of the files 
      notepad.open(root + "\\" + fn)  
      notepad.runMenuCommand("Encoding", "Convert to UTF-8") 
      # notepad.save() 
      # if you try to save/replace the file, an annoying confirmation window would popup. 
      notepad.saveAs("{}{}".format(fn[:-4], '_utf8.xml')) 
      notepad.close() 

A fin de cuentas, ejecute el script

+2

Gran solución. Como utilizo la localización de Notepad ++, he tenido que traducir las opciones 'Encoding' y 'Convert to UTF-8', raro. – Piotr

+0

Me pregunto cómo ejecutar el script de python? Lo ejecuto en una línea de comando y dice que no se puede encontrar el bloc de notas. – flexwang

+2

Hola flexwang, deberías ejecutarlo desde el Bloc de notas ++ –

Cuestiones relacionadas