2010-03-11 23 views
6

Sto riscontrando alcuni problemi nella scrittura di un file in unicode nel mio programma c. Sto provando a scrivere una stringa giapponese unicode in un file. Quando vado a controllare il file è vuoto. Se provo una stringa non unicode, funziona perfettamente. Che cosa sto facendo di sbagliato?Scrittura su un file in Unicode

setlocale(LC_CTYPE, ""); 
FILE* f; 
f = _wfopen(COMMON_FILE_PATH,L"w"); 
fwprintf(f,L"日本語"); 
fclose(f); 

Oh circa il mio sistema: Sono in esecuzione di Windows. E il mio IDE è Visual Studio 2008.

+0

sto postando questo come un commento piuttosto che una risposta, perché non so fagioli su C, ma mi chiedo se il codice sorgente è in UTF-8, e il compilatore pensa che sia ASCII . –

+0

No, non penso sia così. Il compilatore sa che è UTF-8, ne sono sicuro: p – Lefteris

+0

OK. Comunque valeva la pena sparare. :-) –

risposta

8

Potrebbe essere necessario aggiungere la codifica alla modalità. Forse questo:

f = _wfopen(COMMON_FILE_PATH,L"w, ccs=UTF-16LE"); 
+0

Grazie .. ha funzionato, ma ciò crea una domanda aggiuntiva. questo in modo che potessi essere in grado di scrivere unicode su file in generale.Il giapponese era solo un esempio Questo funzionerà con tutte le lingue supportate da Unicode, corretto? – Lefteris

+0

Corretto. Non dovrebbe essere dipendente dalla lingua. –

0

Fare lo stesso con fopen() funziona per me qui. Sto usando Mac OS X, quindi non ho _wfopen(); supponendo che lo _wfopen() non ti restituisca cose cattive, il tuo codice dovrebbe funzionare.

Modifica: ho eseguito il test anche su cygwin, ma sembra funzionare correttamente.

+0

Non ha funzionato per me :(, _wfopen restituisce un normale puntatore FILE * Sono in esecuzione Windows e il mio IDE è Visual Studio 2008. – Lefteris

0

Non riesco a trovare un riferimento a _wfopen su nessuna delle mie caselle, tuttavia non vedo perché aprirlo con fopen dovrebbe causare un problema, tutto ciò che serve è un puntatore di file.

Ciò che importa è se C riconosce i valori interni di Unicode e li spinge correttamente nel file.

Prova solo a usare fopen come suggerito da Carl, dovrebbe funzionare correttamente.

Modifica: se non funziona ancora, puoi provare a definire i caratteri come valori interi e spingendoli con fwprintf(), so che è ingombrante e non una buona soluzione a lungo termine, ma dovrebbe funzionare come bene.