Así que finalmente he vuelto a mi tarea principal, portar un proyecto C++ bastante grande desde Windows a la Mac.Cadenas multiplataforma (y Unicode) en C++
Directamente He sido golpeado por el problema donde wchar_t tiene 16 bits en Windows pero 32 bits en la Mac. Esto es un problema porque todas las cadenas están representadas por wchar_t y habrá datos de cadenas entre máquinas Windows y Mac (tanto en datos en disco como en formularios de datos de red). Debido a la forma en que funciona, no sería totalmente sencillo convertir las cadenas en algún formato común antes de enviar y recibir los datos.
También hemos comenzado a admitir muchos más idiomas recientemente, por lo que estamos comenzando a manejar una gran cantidad de datos Unicode (y también a idiomas de derecha a izquierda).
Ahora, podría estar combinando varias ideas aquí y causándome más problemas de los necesarios, razón por la cual hago esta pregunta. Estamos pensando que almacenar todos nuestros datos de cadenas en memoria como UTF-8 tiene mucho sentido. Resuelve el problema de que wchar_t es de diferentes tamaños, significa que podemos admitir fácilmente varios idiomas y también reduce drásticamente nuestra huella de memoria (tenemos MUCHAS cadenas en su mayoría inglesas cargadas) pero no parece que mucha gente lo esté haciendo esta. ¿Hay algo que nos falta? Existe el problema obvio de que debe lidiar cuando la longitud de la cadena puede ser menor que el tamaño de la memoria que almacena esa cadena de datos.
¿O está usando UTF-16 una mejor idea? ¿O deberíamos quedarnos con wchar_t y escribir el código para convertir entre wchar_t y, por ejemplo, Unicode en lugares donde leemos/escribimos en el disco o la red?
Me doy cuenta de que esto está peligrosamente cerca de pedir opiniones, pero estamos nerviosos porque estamos pasando por alto algo obvio, porque no parece que haya muchas clases de cadenas Unicode (por ejemplo), pero aún así hay muchas código para convertir a/desde Unicode como en boost :: locale, iconv, utf-cpp e ICU.
Sólo una palabra que decir. http://utf8everywhere.org –