Sto usando la libreria ICU in C++ su OS X. Tutte le mie stringhe sono UnicodeStrings, ma ho bisogno di usare chiamate di sistema come fopen, fread e così via. Queste funzioni prendono const char * o char * come argomenti. Ho letto che OS X supporta internamente l'UTF-8, quindi tutto ciò che devo fare è convertire il mio UnicodeString in UTF-8, ma non so come farlo.UnicodeString to char * (UTF-8)
UnicodeString ha una funzione membro toUTF8(), ma restituisce un ByteSink. Ho anche trovato questi esempi: http://source.icu-project.org/repos/icu/icu/trunk/source/samples/ucnv/convsamp.cpp e ho letto sull'utilizzo di un convertitore, ma sono ancora confuso. Qualsiasi aiuto sarebbe molto apprezzato.
Grazie! Questo funziona. Non sono sicuro dell'argomento destCapacity e della lunghezza di UnicodeString. Questo codice funziona: http://codepad.org/blaSP0ex ma noterete che raddoppio manualmente il .length() di UnicodeString per recuperare la stringa multibyte. Come posso assicurarmi che ci sia spazio sufficiente nel mio char * dest? – zfedsa
http://icu-project.org/apiref/icu4c/classUnicodeString.html#125255f27efd817e38806d76d9567345 Restituisce la lunghezza necessaria per la stringa di output e un U_BUFFER_OVERFLOW_ERROR nello stato se non c'era spazio sufficiente. Vedi http://userguide.icu-project.org/strings#TOC-Using-C-Strings:-NUL-Terminated-vs%2e –
Grazie. La documentazione dice che è meglio indovinare la dimensione e se c'è un errore di overflow del buffer, quindi chiamare di nuovo la funzione di estrazione con la lunghezza restituita dalla prima chiamata. Lo faccio qui: http://codepad.org/nyp5yJWB ma la seconda chiamata non riesce ancora, anche se fornisco la lunghezza corretta restituita dalla prima chiamata di estrazione. Che cosa sto facendo di sbagliato? – zfedsa