Ich habe damit experimentiert, Dateien zu lesen (Textdateien, die in Unicode codiert sind), und aus irgendeinem Grund erhalte ich ein Fragezeichen am Anfang der Ausgabe.
Hier ist der Code.
#include
#include
#include
#include
int main(void)
{
HANDLE hFile = CreateFile(L"dog.txt",
GENERIC_READ,
NULL,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
_setmode(_fileno(stdout), _O_U16TEXT); // Stellt sicher, dass die Konsole die
// breiten Zeichen korrekt anzeigt. Siehe unten den Link
LARGE_INTEGER li;
GetFileSizeEx(hFile,&li);
WCHAR* pBuf = new WCHAR[li.QuadPart / sizeof(WCHAR)]; // Allokiert Speicher für die Datei.
DWORD dwRead = 0;
BOOL bFinishRead = FALSE;
do
{
bFinishRead = ReadFile(hFile,pBuf,li.QuadPart,&dwRead,NULL);
} while(!bFinishRead);
pBuf[li.QuadPart / sizeof(WCHAR)] = 0; // Stellt sicher, dass das Ende der Ausgabe
// mit einem Nullzeichen terminiert ist.
std::wcout << pBuf << std::endl;
std::cin.get();
return 1;
}
dog.txt
One Two Three
Konsolenausgabe
?One Two Three
Ich habe bereits einen Großteil des Kauderwelschs eliminiert, indem ich sichergestellt habe, dass das Ende der Ausgabe mit einem Nullzeichen terminiert ist, aber das ? am Anfang verwirrt mich.
Was das
_setmode(_fileno(stdout), _O_U16TEXT);
angeht, siehe Ausgabe von Unicode-Zeichenfolgen in Windows-Konsolenanwendung
Hinweis: Mein Code ist auf Windows ausgerichtet, und ich habe vor, das so beizubehalten, wenn möglich.
Vielen Dank.