Pregunta

al portar mi proyecto de Visual C ++ para GCC, descubrí que el tipo de datos wchar_t es de 4 bytes UTF-32 de forma predeterminada. Podría anular que con una opción del compilador, pero entonces todo el WCS * (wcslen, wcscmp, etc.) parte de RTL se vuelve inutilizable, ya que asume amplias cadenas de 4 bytes.

Por ahora, he vuelto a implementar 5-6 de estas funciones a partir de cero y #defined mis implementaciones en ¿Pero hay una opción más elegante -. Digamos, una acumulación de GCC RTL con 2 bytes wchar-t tranquilamente sentado en alguna parte , a la espera de vincularse?

Los sabores específicos de GCC que busco son Xcode en Mac OS X, Cygwin, y el que viene con Debian Linux Etch.

¿Fue útil?

Solución 4

Reimplementado 5-6 de WCS más comunes * funciones, #defined mis implementaciones en.

Otros consejos

Pero hay una opción más elegante - por ejemplo, una versión de GCC RTL con 2 bytes wchar-t sentarse tranquilamente en alguna parte, esperando a ser ligado

No. Este es un problema específico de la plataforma, no una cuestión de GCC.

Es decir, está previsto por la plataforma Linux ABI que wchar_t es de 32 bits de ancho, por lo que tampoco hay que usar una biblioteca completamente nuevo (para el que la UCI es una opción popular), o puerto su código para manejar 4 bytes wchar_ts. Todas las bibliotecas que te pueden enlazar también asumirá una wchar_t de 4 bytes, y descanso si se utiliza -fshort-wchar de GCC.

Pero en Linux específicamente, casi todo el mundo ha estandarizado en UTF-8 para todas las codificaciones multibyte.

Mire la UCI biblioteca . Es una biblioteca portátil con un API UTF-16.

Como se ha notado, wchar_t está definido por la implementación. No hay forma de trabajo portátil con ese tipo de datos.

sistemas Linux en general tenía la ventaja de obtener el apoyo de Unicode más tarde, después de todo el UCS-2 debacle fue declarada no tan gran idea, y el uso de UTF-8 como la codificación. Todas las API del sistema siguen funcionando en char *, y son Unicode seguro.

Sus mejores opciones son utilizar una biblioteca que gestiona esto para usted:. Qt, UCI, etc

Tenga en cuenta que cygwin cuenta con un wchar_t 2 bytes para hacer que engrana con Windows más fácil.

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