Pregunta

¿Cuáles son los típicos promedio de bytes por carácter de las tasas para diferentes codificaciones unicode en diferentes idiomas?

E. g.si yo quería que el menor número de bytes para codificar algún texto en inglés, en promedio UTF-8 sería de 1 byte por carácter y UTF-16 2 así que me quedaría con UTF-8.

Si yo quería algo de coreano de texto, a continuación, UTF-16 podría promedio de alrededor de un 2 por carácter, pero UTF-8 podría promedio de 3 (no sé, estoy haciendo algunos ilustrativos aquí los números).

Que las codificaciones de rendimiento el más pequeño de los requisitos de almacenamiento para diferentes idiomas y conjuntos de caracteres?

¿Fue útil?

Solución

Para cualquier idioma, su bytes por carácter tarifas son bastante constantes, debido a que la mayoría de los idiomas se asignan a contiguos de páginas de código.La gran excepción es acentuados caracteres latinos, que se asignan mayor en el espacio de código que el de las no acentuadas son las formas.No tengo cifras para estos.

Para los idiomas con contiguas carácter de asignación, no es un tabla con cifras detalladas en varios idiomas en la Wikipedia.En general, UTF-8 funciona bien para la mayoría de los pequeños conjuntos de caracteres (con la excepción de los asignados en alto el código de las páginas), y UTF-16 es ideal para dos bytes conjuntos de caracteres.

Si usted necesita más denso de compresión, usted también puede desear mirar en Unicode Nota Técnica 14, que compara algunos de propósito especial codificaciones diseñado para reducir el tamaño de los datos para una variedad de idiomas.Pero estas técnicas no son especialmente comunes.

Otros consejos

Si usted está realmente preocupado por la cadena de caracteres de tamaño, ¿has pensado acerca de la compresión de ellos?Que automáticamente reducirá la cadena es "mínimos" de la codificación.Es una capa de dolor de cabeza, sobre todo si quieres hacerlo en la memoria, y hay un montón de casos en los que no iba a comprar nada, pero de codificación, especialmente, tienden a ser muy de propósito general para el nivel de compacidad que parecen estar buscando.

UTF8 es el mejor para cualquier conjunto de caracteres donde los personajes son principalmente por debajo de U+0800.De lo contrario, UTF16.

Es decir, UTF8 para el latín, griego, Cirílico, hebreo y árabe, y algunos otros.En idiomas no latinos, los caracteres ocupan el mismo espacio que en UTF16, pero te vas a ahorrar bytes en los signos de puntuación y los espacios.

En UTF-16, todos los idiomas que la materia (es decir,nada, pero los klingon, elfos y otras cosas extrañas) se codificará en 2 bytes de caracteres.

Así que la cuestión es encontrar los idiomas que se han glifos que será de 2 bytes o 1 byte de tamaño de caracteres de largo.

En la página de la Wikipedia en UTF-8:http://en.wikipedia.org/wiki/Utf-8

Vemos que un personaje con un índice unicode de 0 x 0800 o más será de al menos 3 caracteres en UTF-8.

Sabiendo que, usted sólo tiene que mirar en el código de gráficos en unicode: http://www.unicode.org/charts/

para los idiomas que se ajusten a tus necesidades.

:-)

Ahora, tenga en cuenta que, en función del marco que se está utilizando, la elección podría ser el suyo no hacer:

  • En la API de Windows, Unicode es manejado por wchar_t caracteres, y es UTF-16
  • En Linux, Unicode es manejado por char, y es UTF-8
  • Java es internamente UTF-16, ya que son más compatibles con los analizadores XML
  • Me dijeron (algunos tech reunión a la que no estaba interesado en...lo siento...) que UTF-8 fue la codificación de las opciones en las Bases de datos.

Así que escoja su veneno...

:-)

No sé las cifras exactas, pero para los Japoneses Shift_JIS promedios de menos bytes por carácter de UTF-8, y lo hace EUC-JP, ya que está optimizado para el texto en Japonés.Sin embargo, no cubren el mismo espacio de los puntos de código Unicode, por lo que podría no ser correcta en respuesta a su pregunta.

UTF-16 es mejor que la codificación UTF-8 para los caracteres Japoneses (2 bytes por char frente a las 3), pero peor que el UTF-8 si hay un montón de 7-bits de caracteres.Depende del contexto - texto técnico tiene más probabilidades de contener una gran cantidad de caracteres en el 1-rango de bytes.Un clásico Japonés de texto que no tenga ninguna.

Tenga en cuenta que para el transporte, la codificación no importa mucho si usted puede postal (gzip, bz2) de los datos.Puntos de código para un alfabeto en Unicode están muy juntas, por lo que usted esperaría prefijos comunes, con muy breves representaciones de los datos comprimidos.

UTF-8 es generalmente bueno para la representación en la memoria, dado que a menudo es más compacto que el UTF-32 o UTF-16, y es compatible con funciones en char* que 'esperar' ASCII o ISO-8859-1 NUL cadenas terminadas.Es inútil si usted necesita el acceso aleatorio a los personajes por el índice, sin embargo.

Si no te importa que no sean de caracteres BMP, UCS-2 es siempre de 2 bytes por carácter y por eso ofrece acceso aleatorio.Pero eso depende de lo que quieres decir por "Unicode".

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