Estoy usando la biblioteca de ICU en C++ en OS X. Todas mis cadenas son UnicodeStrings, pero necesito usar llamadas al sistema como fopen, fread, etc. Estas funciones toman const char * o char * como argumentos. He leído que OS X es compatible con UTF-8 internamente, por lo que todo lo que tengo que hacer es convertir Mi UnicodeString a UTF-8, pero no sé cómo hacerlo.UnicodeString a char * (UTF-8)
UnicodeString tiene una función de miembro toUTF8(), pero devuelve un ByteSink. También encontré estos ejemplos: http://source.icu-project.org/repos/icu/icu/trunk/source/samples/ucnv/convsamp.cpp y leí sobre el uso de un convertidor, pero todavía estoy confundido. Cualquier ayuda sería muy apreciada.
¡Gracias! Eso funciona No estoy seguro sobre el argumento destCapacity y la longitud de UnicodeString. Este código funciona: http://codepad.org/blaSP0ex pero notarás que duplico el .length() de UnicodeString manualmente para compensar la cadena multibyte. ¿Cómo puedo asegurarme de que haya suficiente espacio en mi char * dest? – zfedsa
http://icu-project.org/apiref/icu4c/classUnicodeString.html#125255f27efd817e38806d76d9567345 Devolverá la longitud necesaria para la cadena de salida y un U_BUFFER_OVERFLOW_ERROR en estado si no hubiera suficiente espacio. Ver http://userguide.icu-project.org/strings#TOC-Using-C-Strings:-NUL-Terminated-vs%2e –
Gracias. La documentación dice que es mejor adivinar el tamaño y si hay un error de desbordamiento del búfer, luego llamar de nuevo a la función extraer con la longitud devuelta desde la primera llamada. Lo hago aquí: http://codepad.org/nyp5yJWB pero la segunda llamada aún falla, aunque le proporciono la longitud correcta devuelta desde la primera llamada de extracción. ¿Qué estoy haciendo mal? – zfedsa