por
pobrecito hablador
el Jueves, 13 Septiembre de 2007, 16:29h
(#959114)
Por supuesto. Todo a UTF8 y no hay problema
La frase "Todo a UTF-8 y no hay problema" define al programador que la dice o más bien, el nivel de su lenguaje:-)
UTF-8 es un infierno. Para saber algo tan tonto como cuántos caracteres tiene una cadena hay que ir leyendo un byte, interpretar bits para ver si el siguiente byte también forma parte del carácter e igual con los consecutivos (hay caracteres de 1, 2, 3 y 4 bytes). Complejo y lento sobre todo.
Los únicos puntos fuertes que tiene es que es compacto y es compatible con las cadenas antiguas si te limitas a ascii-7, también funcionan las búsquedas de Boyer-Moore sin cambiar una línea. Todo lo demás son quebraderos de cabeza a menos, claro, que te sitúes a kilómetros de esa complejidad detrás de capas de Java que te aíslen de los peligrosos bytes y de lo que circula por los cables:-)
Si no tienes que pasar por Internet usa UTF-16. El desempeño seguramente será mejor y los programadores te lo agradecerán.
Supongo que te refieres a UCS-2 en vez de UTF-16. Esos dos son muy parecidos pero no son iguales. UTF-16 tiene casi los mismos problemas que UTF-8 y casi ninguna de sus ventajas. El parseo es más sencillo pero tienes caracteres de 2 y de 4 bytes (aunque los de cuatro sean poco comunes siguen estando ahí) así que sigues sin saber el tamaño del carácter hasta que no lo lees y no puedes indexar la cadena hasta que no la interpretas.
UCS-2 es la codificación que usan internamente Windows o Java --.NET creo que usa UTF-16-- y sus caracteres son de tamaño fijo... Entre comillas porque también puedes representar Unicode completo pero el proceso es más simple de tratar que con UTF-16.
Una pregunta, por curiosidad. Hoy en día ¿Para que necesitas saber cuantos carácteres tiene una cadena?
Para guardar en una base de datos, se sigue bastando con el strlen de toda la vida. Para saber cuanto ocupa de ancho una "frase".... ¿No preguntas al componente gráfico cuanto ocupa? (Porque las fuentes monoespace estan quedando en desuso).
En otros temas que se me ocurren (véase nombres de usuarios y contraseñas). Tampoco es mucho problema, ya que se revisan cada mucho tiempo, y podemos prescindir de algo de procesador.
Así pues... ¿Que uso haces de las cadenas que necesitas saber el ancho de los carácteres y es tan repetitiva que te importa sobremanera el rendimiento?
Re:La gran olvidada
(Puntos:1, Interesante)UTF-8 es un infierno. Para saber algo tan tonto como cuántos caracteres tiene una cadena hay que ir leyendo un byte, interpretar bits para ver si el siguiente byte también forma parte del carácter e igual con los consecutivos (hay caracteres de 1, 2, 3 y 4 bytes). Complejo y lento sobre todo.
Los únicos puntos fuertes que tiene es que es compacto y es compatible con las cadenas antiguas si te limitas a ascii-7, también funcionan las búsquedas de Boyer-Moore sin cambiar una línea. Todo lo demás son quebraderos de cabeza a menos, claro, que te sitúes a kilómetros de esa complejidad detrás de capas de Java que te aíslen de los peligrosos bytes y de lo que circula por los cables
Si no tienes que pasar por Internet usa UTF-16. El desempeño seguramente será mejor y los programadores te lo agradecerán.
Re:La gran olvidada
(Puntos:1)UCS-2 es la codificación que usan internamente Windows o Java --.NET creo que usa UTF-16-- y sus caracteres son de tamaño fijo... Entre comillas porque también puedes representar Unicode completo pero el proceso es más simple de tratar que con UTF-16.
Re:La gran olvidada
(Puntos:1)( http://www.septeto.com/ | Última bitácora: Sábado, 01 Octubre de 2005, 13:34h )
Para guardar en una base de datos, se sigue bastando con el strlen de toda la vida. Para saber cuanto ocupa de ancho una "frase".... ¿No preguntas al componente gráfico cuanto ocupa? (Porque las fuentes monoespace estan quedando en desuso).
En otros temas que se me ocurren (véase nombres de usuarios y contraseñas). Tampoco es mucho problema, ya que se revisan cada mucho tiempo, y podemos prescindir de algo de procesador.
Así pues... ¿Que uso haces de las cadenas que necesitas saber el ancho de los carácteres y es tan repetitiva que te importa sobremanera el rendimiento?