2010-03-11 2 views
6

Ich habe einige Probleme beim Schreiben in eine Datei in Unicode in meinem c-Programm. Ich versuche, eine japanische Unicode-Zeichenkette in eine Datei zu schreiben. Wenn ich die Datei überprüfe, ist sie leer. Wenn ich eine Nicht-Unicode-Zeichenfolge versuche, funktioniert es gut. Was mache ich falsch?Schreiben in eine Datei in Unicode

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

Oh über mein System: ich Windows leite. Und meine IDE ist Visual Studio 2008.

+0

Ich bin dieses Posting als Kommentar, anstatt eine Antwort, weil ich weiß, Bohnen nicht über C, aber ich frage mich, ob Ihr Quellcode in UTF-8 ist, und der Compiler denkt, es ist ASCII . –

+0

Nein, ich denke nicht, dass das der Fall ist. Der Compiler weiß, dass es UTF-8 ist, ich habe mich davon überzeugt: p – Lefteris

+0

OK. Es war trotzdem einen Versuch wert. :-) –

Antwort

8

Möglicherweise müssen Sie die Codierung zum Modus hinzufügen. diese möglicherweise:

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

Danke .. das hat funktioniert. Aber das schafft eine zusätzliche Frage. Ich wollte eigentlich Damit kann ich in der Lage sein, Unicode generell in Dateien zu schreiben. Japanisch war nur ein Beispiel. Dies funktioniert für alle Unicode-unterstützten Sprachen, korrekt? – Lefteris

+0

Korrekt. Es sollte nicht sprachabhängig sein. –

0

Das Gleiche mit funktioniert für mich hier. Ich benutze Mac OS X, daher habe ich keine _wfopen(); vorausgesetzt, dass _wfopen() Ihnen keine schlechten Sachen zurückgibt, sollte Ihr Code funktionieren.

Edit: Ich habe auch auf Cygwin getestet - es scheint auch zu funktionieren.

+0

Funktioniert nicht für mich :(, _wfopen gibt einen normalen FILE * -Zeiger zurück. Ich bin Windows. Und meine IDE ist Visual Studio 2008. – Lefteris

0

Ich kann keinen Verweis auf _wfopen auf einer meiner Boxen finden, ich sehe jedoch nicht, warum das Öffnen mit fopen ein Problem verursachen sollte, alles was Sie brauchen, ist ein Dateizeiger.

Es kommt darauf an, ob C die internen Unicode-Werte erkennt und diese Binärwerte korrekt in die Datei schreibt.

Versuchen Sie nur fopen wie Carl vorgeschlagen, sollte es richtig funktionieren.

Edit: wenn es immer noch nicht funktioniert, können Sie versuchen, die Zeichen als Integer-Werte definieren und drücken sie mit fwprintf(), ich weiß, dass ist umständlich und nicht eine gute Lösung auf lange Sicht, aber es sollte als funktionieren Gut.