2009-06-18 3 views
1

Ich habe ein paar Antworten hier über das Lesen von Unicode-Dateien usw. gelesen und die meisten Leute zeigen auf UTF8-CPP oder iconv.C++ Datei lesen Bibliothek - ANSI und Unicode

Keine der Bibliotheken, die ich gefunden habe, funktionieren sowohl für ANSI- als auch für Unicode-Dateien, idealerweise möchte ich eine Funktion, an die ich einen Dateinamen übergebe und die den Inhalt dieser Datei zurückgibt. oder ist das nicht möglich?

Wenn ja irgendwelche Vorschläge, wie würde ich darüber gehen?

+0

Der heilige Gral der 100% garantiert automatische Erkennung der Dateicodierung ist nicht möglich. Es gibt Algorithmen zu erraten, aber sie sind nicht 100% zuverlässig. –

Antwort

2

Nun, das ist eine binäre Lese nicht? Alle anderen Formen sind eine Frage der Interpretation und dann wird die genaue Kodierung usw. wichtig.

Während aufgrund von BOM Unicode in einigen Fällen automatisch erkannt werden kann, ist sie nicht immer vorhanden, und ein fehlgeschlagener Erkennungsmechanismus entspricht dann einem fehlerhaften Programm. Ich nehme an, das ist der Grund, warum die meisten Menschen davon Abstand nehmen.

+0

vielleicht bezieht er sich auf Unicode-Dateinamen. –

0

UTF8-CPP kann UTF8 (utf8 :: is_valid und utf8 :: find_invalid) erkennen und Konvertierung (utf8 :: utf16to8) durchführen, wenn Sie widestring verwenden. Es funktioniert gut, was ist das Problem?

0

Sie können eine Kombination von Techniken verwenden:

Im Allgemeinen sind die meisten Unicode-Dateien beginnen mit dem BOM. Das heißt, wenn die Datei mit 0xfffe oder 0xfeff beginnt, können Sie davon ausgehen, dass es Unicode ist. Nicht viele Leute verwenden UTF-32 AFAIK, aber Sie können immer noch die BOM-Methode verwenden, um zu raten (siehe Wiki-Seite). Wenn es sich um eine UTF-8-Datei handelt, können Sie UTF8-CPP verwenden, um UTF-16 (wstring) zu konvertieren. Wenn es sich um eine UTF-16-Datei handelt, kann es schwierig sein, sie mit der Standardbibliothek zu lesen. Für taht, können Sie in meinem Blog Post verweisen:

http://cfc.kizzx2.com/index.php/reading-a-unicode-utf16-file-in-windows-c/

für UTF-32 - Ich weiß nicht, ob jemand es verwendet, so habe ich keine Erfahrung: P