2010-10-05 21 views
6

Estoy usando ASP.NET MVC, MS SQL e IIS. Tengo algunos usuarios que han usado caracteres chinos en su información de perfil. Sin embargo, cuando visualizo esta información aparece como æŽå¼·è¯ pero son correctos en mi base de datos. Actualmente, mi UTF para mis páginas HTML está configurado en UTF-8. ¿Debo cambiarlo a UTF-16? Entiendo que hay un few problems que puede provenir de esto, pero ¿cuáles son mis opciones?¿Debo cambiar de UTF-8 a UTF-16 para acomodar caracteres chinos en mi HTML?

Gracias,

Aaron

+0

¿Está utilizando 'htmlentities()' o 'htmlspecialchars()' al realizar la salida? – Andrew67

+0

esos son solo para PHP, ¿verdad? –

+0

¿Has probado a especificar tu juego de caracteres en tus meta tags? https://www.w3.org/International/questions/qa-html-encoding-declarations –

Respuesta

4

Cualquier codificación UTF debería funcionar de la misma en su capacidad para representar caracteres Unicode por lo que el cambio a UTF-16 no ayudaría. Hay un problema de codificación en alguna parte y con UTF-16 solo terminarías con una representación incorrecta de HTML diferente. Por supuesto, si tiene una biblioteca que simplemente codifica caracteres no ASCII como entidades y admite caracteres anchos, su problema puede resolverse mediante el interruptor. Sin embargo, hay personajes que necesitan incluso 2 caracteres anchos y que se mostrarían incorrectos, aunque los usuarios rara vez lo notarían. La mejor opción sería tener todo lo que esté produciendo el HTML para interpretar correctamente su UTF-8.

18

UTF-8 y UTF-16 codifican exactamente el mismo conjunto de caracteres. No es que UTF-8 no cubra caracteres chinos y UTF-16 sí. UTF-16 utiliza uniformemente 16 bits para representar un personaje; mientras que UTF-8 usa 1, 2, 3, hasta un máximo de 4 bytes, dependiendo del carácter, de modo que un carácter ASCII se representa todavía como 1 byte. Comience con this Wikipedia article para entender la idea.

Por lo tanto, hay pocas posibilidades de cambiar a UTF-16 que lo ayudará en absoluto. Existe la posibilidad de que empeore las cosas, como se discute en la pregunta de SO que vinculó anteriormente. Hay un problema en otro lugar en su configuración, que no tiene en cuenta correctamente los caracteres que no son ASCII o que no son Latin-1. Asegúrese de que cada parte de su configuración funcione en UTF-8.

+3

UTF-16 puede tener 2 unidades de código de 16 bits cada una, tomando 32 bits en total para representar un carácter, vea algunos ejemplos en http: //en.wikipedia.org/wiki/UTF-16 – Anton

+1

@yuji En realidad, UTF-8 puede usar hasta 4 bytes. Inicialmente era 6 pero después de darme cuenta de que esto sería una exageración (¡solo utilizamos alrededor de 110,000 hoy en día, mientras que 6 bytes permitirían 2 billones!) Las personas se conformaron con 4 bytes http://tools.ietf.org/html/rfc3629 – joakim

Cuestiones relacionadas