Zunächst einmal: Ich weiß, es gibt ähnliche Themen für C++, aber ich bin neugierig auf Standard C, und ich glaube nicht, dass mein Problem mit früheren Problemen zusammenhängt.Drucken/Schreiben wchar_t?
Ich versuche Unicode-Unterstützung für ein einfaches Programm zu implementieren, das den Benutzer nur auffordert, ein Verzeichnis über einen Ordnerbrowser auszuwählen und es dann an ein anderes Programm weiterzuleiten (nur an den ersten Teil). Wenn Sie jedoch versuchen, den empfangenen Pfad in eine Datei zu schreiben, wird eine 0-Byte-Datei erstellt. Und wenn es mit wprintf_s
ausgedruckt wird, erscheinen Nicht-ASCII-Zeichen als Fragezeichen. Ich glaube nicht, dass es ein undefiniertes Verhalten oder irgendetwas gibt, da ich die Dokumentation doppelt überprüft habe. Was mache ich falsch?
Der Code sieht derzeit wie folgt aus (nur das Nötigste für strenge Testbedingungen):
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
int main()
{
BROWSEINFOW bi = { 0 };
LPITEMIDLIST pidl;
wchar_t path[MAX_PATH];
pidl = SHBrowseForFolderW(&bi);
SHGetPathFromIDListW(pidl, path);
wprintf_s(L"%s\n", path);
return 0;
}
Der obige Code druckt es regelmäßig. Wenn stattdessen in eine Datei zu schreiben versucht, ersetze ich den wprintf_s
Anruf mit diesem (FILE *f
zuerst natürlich erklärt hat):
if(_wfopen_s(&f, L"C:\\test.txt", L"w"))
{
fwprintf_s(f, L"%s\n", path)
fclose(f);
}
Allerdings habe ich auch versucht, fwrite
sowohl mit w
und wb
-Modus verwenden, aber alle Methoden ergibt eine leere Datei.
Try '_setmode (_fileno (stdout), _O_U16TEXT);' http://stackoverflow.com/a/36527398/4603670 –
@BarmakShemirani Huh. Das funktioniert für stdout, aber ich bekomme immer noch leere Ausgabe für tatsächliche Dateien? Irgendwelche Ideen? – user966939
Das Problem ist, dass die Terminal-Anwendung oder die App, die die Ausgabe zeigt, wahrscheinlich nicht richtig konfiguriert ist. –