2008-10-27 5 views
7

¿Cuál es la forma más sencilla de convertir un punto de código Unicode en una secuencia de bytes UTF-8 en C? La única forma en que viene a la mente es usar iconv para mapear desde la página de códigos UTF-32LE a UTF-8, pero eso parece exagerado.Forma más sencilla de convertir punto de código Unicode en UTF-8

+0

Terminé yendo con iconv de todos modos. Puede parecer exagerado, pero también parece ser la única solución real sin introducir dependencias externas. –

+0

Entonces, ¿por qué no aceptar la respuesta de @JesperE y subirla? – tvanfosson

+5

Pensé que "ya no es relevante" se usa cuando se soluciona un error en un producto, o se introduce una mejor herramienta, no cuando asker ya no está interesado en la respuesta ... –

Respuesta

7

La conversión Unicode no es una tarea sencilla. Usar iconv no me parece exagerado. Tal vez haya una versión de biblioteca de iconv que puede usar para evitar hacer una llamada a system(), si eso es lo que quiere evitar.

+0

Ya estaba planeando usar la biblioteca. –

+1

Para esta dirección, es una tarea extremadamente simple. No se necesita biblioteca Además, 'iconv' se refiere tanto a una interfaz C como a un programa de utilidad en POSIX. Sospecho que OP estaba hablando de la interfaz C, lo que sería una muy buena opción para esto, pero escribirlo tú también no es difícil. Es la otra dirección (UTF-8 a puntos de código) que es fácil de estropear. –

3

UTF8 funciona codificando la longitud del punto de código codificado en los bits más altos de los bytes codificados. ver http://en.wikipedia.org/wiki/UTF-8#Description

Encontré esta pequeña función en C aquí http://www.deanlee.cn/programming/convert-unicode-to-utf8/, aunque no lo probé.

+0

Tenga en cuenta que este código solo maneja puntos de código por debajo de 0x10000 (ya que wchar_t en Windows es realmente UTF-16). –

+1

Enlace al código en el camino atrás de la máquina: http://web.archive.org/web/20100305210636/http://www.deanlee.cn/programming/convert-unicode-to-utf8/ – Eloff

5

¿Puedo sugerir ICU? Es una forma razonablemente "estándar de la industria" de manejar problemas con i18n.

No he usado la versión C yo mismo, pero sospecho que ucnv_fromUnicode podría ser la función que buscas.

+0

No voy a introduzca dependencias en un nuevo conjunto de bibliotecas no proporcionadas por el sistema solo para esta tarea. Gracias por la sugerencia, sin embargo. –

Cuestiones relacionadas