Ich schreibe einen Web-Crawler, um einige chinesische Web-Dateien zu holen. Die abgerufenen Dateien sind in utf-8 codiert. Und ich muss diese Datei lesen, um etwas zu analysieren, wie das Extrahieren der URLs und chinesischen Schriftzeichen. Aber ich fand, dass, wenn ich die Datei in eine std :: string-Variable las und es in die Konsole ausgab, die chinesischen Zeichen zu Müllzeichen wurden. Ich habe den boost :: regex in die Variable std :: string angewendet und kann alle URLs außer chinesischen Zeichen extrahieren.Wie lese ich eine UTF-8-kodierte Datei mit chinesischen Schriftzeichen und gebe sie korrekt auf der Konsole aus?
Wie kann ich diese Probleme lösen?
P.S. Meine CPP-Dateien sind standardmäßig als ANSI codiert, das Betriebssystem ist Win8 in chinesischer Sprache;
Klingt so, als müssten Sie die 'Codepage' von UTF-8 in jede Codepage ändern, die Ihre Konsole für chinesische Zeichen verwendet. Rufen Sie MultiByteToWideChar auf, um von UTF-8 in Unicode zu wechseln, gefolgt von WideCharToMultiByte, um von Unicode zu Ihrer lokalen Codepage zu wechseln. – john
Wahrscheinlich ist die Konsole schuld. Probieren Sie '>' 'in eine Datei aus. Wenn es sich um gültiges UTF-8 mit chinesischen Schriftzeichen handelt, funktioniert Ihr Programm gut und das ist eine Windows-Frage. (Natürlich müssen Sie Ihr Programm möglicherweise noch ändern, um Windows zu verwenden, aber Sie werden wissen, wer die Schuld trägt.) – aib
@aib Ja, wenn ich die Variable std :: string in eine andere Datei umleite, ist der Inhalt immer noch gültig UTF-8 mit Chiese-Zeichen. Die Codepage meiner Konsole ist '" 936 (ANSI/OEM - 简体 中文 GBK) "'. –