Estoy escribiendo un servicio web que usa json para representar sus recursos, y estoy un poco atascado pensando en la mejor manera de codificar el json. Al leer el json rfc (http://www.ietf.org/rfc/rfc4627.txt) queda claro que la codificación preferida es utf-8. Pero el rfc también describe un mecanismo de escape de cadena para especificar caracteres. Supongo que esto generalmente se usaría para escapar de caracteres no ascii, por lo que el utf-8 resultante es válido como ascii.Codificación de caracteres JSON: ¿el navegador UTF-8 está bien soportado o debería usar secuencias de escape numéricas?
Digamos que tengo una cadena json que contiene caracteres Unicode (puntos de código) que no son ascii. ¿Debería mi servicio web simplemente utf-8 codificar eso y devolverlo, o debería escapar de todos esos caracteres no ascii y devolver ascii puro?
Me gustaría que los navegadores puedan ejecutar los resultados usando jsonp o eval. ¿Eso afecta la decisión? Mi conocimiento del soporte JavaScript de varios navegadores para utf-8 es deficiente.
EDIT: Quería aclarar que mi principal preocupación sobre cómo codificar los resultados es realmente sobre el manejo del navegador de los resultados. Lo que he leído indica que los navegadores pueden ser sensibles a la codificación cuando usan JSONP en particular. No he encontrado ninguna información realmente buena sobre el tema, así que tendré que comenzar a hacer algunas pruebas para ver qué pasa. Idealmente, me gustaría escapar de esos pocos caracteres que son necesarios y solo utf-8 codificar los resultados.
Si leer esa cita que ya ha proporcionado verá que usted no está obligado a escapar de todos los caracteres Unicode, sólo unos pocos caracteres especiales. Pero se requiere que codifique los resultados (preferiblemente con utf-8). Entonces, la pregunta es: "¿Por qué molestarse en escapar de los caracteres Unicode normales si está usando la codificación UTF-8?". – schickb
Además, una cadena codificada en ascii es un subconjunto puro de utf-8. Si utilizo el escape de json para todos los caracteres no ascii, el resultado es ascii y, por lo tanto, utf-8. Varias bibliotecas json (como python simplejson) tienen modos para forzar resultados ascii. Supongo que por una razón, como quizás la ejecución en los navegadores. – schickb
Cuando se molesta en escapar de los caracteres Unicode normales se encuentra en contextos donde son metacaracteres, como cadenas. (El fragmento de RFC que cité trata sobre cadenas, lo siento, no estaba claro al respecto). No necesita hacer salidas ASCII todo el tiempo; Creo que eso es más para la depuración con navegadores rotos. – chaos