Pregunta

Hace casi 5 años Joel Spolsky escribió este artículo: "Lo mínimo absoluto que todo desarrollador de software debe saber absolutamente y positivamente sobre Unicode y los conjuntos de caracteres (¡sin excusas!)".

Como muchos, lo leí atentamente y me di cuenta de que ya era hora de familiarizarme con este "reemplazo de ASCII".Desafortunadamente, cinco años después siento que he vuelto a caer en algunos malos hábitos en este ámbito.¿Tiene?

No escribo muchas aplicaciones específicamente internacionales, sin embargo, he ayudado a crear muchos sitios web ASP.NET orientados a Internet, así que supongo que eso no es una excusa.

Entonces, para mi beneficio (y creo que el de muchos otros), ¿puedo recibir comentarios de personas sobre lo siguiente?

  • Cómo "superar" el ASCII de una vez por todas
  • Orientación fundamental al trabajar con Unicode.
  • Libros y sitios web recomendados (recientes) sobre Unicode (para desarrolladores).
  • Estado actual de Unicode (5 años después del artículo de Joels)
  • Direcciones futuras.

Debo admitir que tengo experiencia en .NET y, por lo tanto, también me encantaría recibir información sobre Unicode en el marco .NET.Por supuesto, esto no debería impedir que cualquier persona con antecedentes diferentes comente.

Actualizar:Ver esta pregunta relacionada También pregunté en StackOverflow anteriormente.

¿Fue útil?

Solución

Desde que leí el artículo de Joel y algunos otros artículos de I18n, siempre estuve atento a la codificación de mis caracteres;Y realmente funciona si lo haces de manera constante.Si trabaja en una empresa donde es estándar usar UTF-8 y todo el mundo lo sabe o lo hace, funcionará.

Aquí algunos artículos interesantes (además del artículo de Joel) sobre el tema:

Una cita del primer artículo;Consejos para usar Unicode:

  • Adopte Unicode, no luche contra él;probablemente sea lo correcto y, si no lo fuera, probablemente tendrías que hacerlo de todos modos.
  • Dentro de su software, almacene el texto como UTF-8 o UTF-16;es decir, elige uno de los dos y quédate con él.
  • Intercambiar datos con el mundo exterior utilizando XML siempre que sea posible;esto hace que desaparezcan una gran cantidad de problemas potenciales.
  • Intente hacer que su aplicación esté basada en un navegador en lugar de escribir su propio cliente;Los navegadores se están volviendo bastante buenos manejando los textos del mundo.
  • Si está utilizando el código de biblioteca de otra persona (y por supuesto que lo está), suponga que su manejo Unicode no funciona hasta que se demuestre que es correcto.
  • Si estás haciendo una búsqueda, intenta pasarle los problemas lingüísticos y de manejo de caracteres a alguien que los entienda.
  • Vaya a Amazon o a algún lugar y compre la última revisión del estándar Unicode impreso;contiene bastante bien todo lo que necesitas saber.
  • Dedique algún tiempo a explorar el sitio web de Unicode y aprender cómo funcionan los gráficos de códigos.
  • Si va a tener que trabajar seriamente con idiomas asiáticos, compre el libro de O'Reilly sobre el tema escrito por Ken Lunde.
  • Si tienes una Macintosh, corre y toma la herramienta de inspección de fuentes Unicode de Lord Pixel.Totalmente genial.
  • Si realmente va a tener que ensuciarse con los datos, asista a una de las conferencias Unicode que se realizan dos veces al año.Todos los expertos van y si no sabes lo que necesitas saber, allí podrás encontrar a alguien que lo sepa.

Otros consejos

Pasé un tiempo trabajando con software de motor de búsqueda. No creerías cuántos sitios web ofrecen contenido con encabezados HTTP o metaetiquetas que mienten sobre la codificación de las páginas.A menudo, incluso obtendrá un documento que contiene caracteres ISO-8859 y caracteres UTF-8.

Una vez que haya luchado contra algunos de esos tipos de problemas, comenzará a tomarse muy en serio la codificación de caracteres adecuada de los datos que produce.

.NET Framework utiliza la codificación predeterminada de Windows para almacenar cadenas, que resulta ser UTF-16.Si no especifica una codificación cuando usa la mayoría de las clases de E/S de texto, escribirá UTF-8 sin BOM y leerá verificando primero si hay una BOM y luego asumiendo UTF-8 (lo sé con seguridad StreamReader y StreamWriter comportarse de esta manera.) Esto es bastante seguro para los editores de texto "tontos" que no entienden una lista de materiales, pero un poco desagradable para los más inteligentes que podrían mostrar UTF-8 o la situación en la que en realidad estás escribiendo caracteres fuera del rango ASCII estándar. .

Normalmente esto es invisible, pero puede asomar la cabeza de maneras interesantes.Ayer estaba trabajando con alguien que estaba usando la serialización XML para serializar un objeto en una cadena usando un StringWriter, y no podía entender por qué la codificación siempre era UTF-16.Dado que una cadena en la memoria será UTF-16 y .NET la aplica, eso es lo único que el marco de serialización XML podría hacer.

Entonces, cuando escribo algo que no es solo una herramienta desechable, especifico una codificación UTF-8 con una lista de materiales.Técnicamente, en .NET siempre conocerá accidentalmente Unicode, pero solo si su usuario sabe detectar su codificación como UTF-8.

Me hace llorar un poco cada vez que veo a alguien pregunta: "¿Cómo obtengo los bytes de una cuerda?" y la solución sugerida usa Encoding.ASCII.GetBytes() :(

Regla de oro:Si nunca hurgas ni miras dentro de una cadena y, en cambio, la tratas estrictamente como una masa de datos, estarás mucho mejor.

Incluso hacer algo tan simple como dividir palabras o poner cadenas en minúsculas se vuelve difícil si quieres hacerlo "al estilo Unicode".

Y si quieres hacerlo "al estilo Unicode", necesitarás una biblioteca tremendamente buena.Esto es increíblemente complejo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top