- ¿Cómo determina un navegador qué codificaciones para utilizar cuando un usuario está escribiendo en un cuadro de texto?
Utiliza la codificación de la página fue decodificada como por defecto. De acuerdo con the spec, debe poder anular esto con el atributo accept-charset
del elemento <form>
, pero IE tiene errores, por lo que no debe confiar en esto (he visto varias fuentes diferentes que describen varios errores diferentes, y no lo hago). Tengo todas las versiones relevantes de IE delante de mí para probar, así que lo dejo así).
- ¿Cómo puede Javascript a determinar la codificación de un valor de cadena en un cuadro de texto html?
Todas las cadenas en JavaScript están codificadas en UTF-16. El navegador mapeará todo en UTF-16 para JavaScript, y desde UTF-16 en cualquier página codificada.
UTF-16 es una codificación que surgió de UCS-2. Originalmente, se pensaba que 65,536 puntos de código serían suficientes para todo Unicode, por lo que una codificación de caracteres de 16 bits sería suficiente. Resultó que no es el caso, por lo que el conjunto de caracteres se expandió a 1,114,112 puntos de código. Con el fin de mantener la compatibilidad con versiones anteriores, algunos intervalos no utilizados del juego de caracteres de 16 bits se reservaron para parejas sustitutas, en las que se usaron dos unidades de código de 16 bits para codificar un solo carácter. Lea en UTF-16 and UCS-2 on Wikipedia para más detalles.
El resultado es que cuando tiene una cadena str
en JavaScript, str.length
no le da el número de caracteres, le da el número de unidades de código, donde dos unidades de código se pueden utilizar para codificar un solo carácter, si ese personaje no está dentro del plano multilingüe básico.Por ejemplo, "abc".length
le da 3, pero "".length
le da 6; y "".substring(0,1)
da lo que parece una cadena vacía, ya que la mitad de un par suplente no se puede mostrar, pero la cadena todavía contiene ese carácter no válido (no garantizaré que esto funcione en el navegador cruzado, creo que es aceptable soltar caracteres rotos). Para obtener un personaje válido, debe usar "".substring(0,2)
.
- puedo forzar al navegador a utilizar solamente codificación UTF-8?
La mejor manera de hacer esto es para entregar su página en UTF-8. Asegúrese de que su servidor web esté enviando los encabezados Content-type: text/html; charset=UTF-8
apropiados. Es posible que también desee insertar un elemento <meta charset="UTF-8">
en su elemento <head>
, para los casos en que el Content-Type
no se establece correctamente (como si su página se carga fuera del disco local).
- ¿Cómo puedo codificar codificaciones arbitrarias a UTF-8 Asumo que es una biblioteca JavaScript para esto?
No hay mucha necesidad en JavaScript para codificar texto en codificaciones particulares. Si simplemente está escribiendo en el DOM, o leyendo o completando controles de formulario, debe usar cadenas de JavaScript que se tratan como secuencias de unidades de código UTF-16. XMLHTTPRequest
, cuando se utiliza para send(data)
a través de POST, utilizará UTF-8 (si pasa un documento con una codificación diferente declarada en la declaración <?xml ...>
, puede o no convertir eso a UTF-8, por lo que para compatibilidad generalmente no debería ' usar cualquier cosa que no sea UTF-8).
¡Esas son muchas preguntas! ¿Tenemos que responderlos todos para publicar una respuesta? –
@Mark Byers para nada, creo que están relacionados con el problema que intento resolver. Las respuestas a las primeras 4 preguntas me acercan a mi solución. –