[c++]

S

Spacy

Gast
Hallo.
Ich arbeite gerade an einer ganz simplen C++-Klasse, die ganz eifnaches extrahieren von Dateien aus 7z-Archiven ermöglicht. Ich hab die Grudnlegende Funktionsweise mal schnell mit MFC runtergetippt und es läuft auch, jetzt mach ich das alles zu einer Speicherschonenden Klasse ohne Betriebssystemspezifische Abhängigkeiten.

Also, folgendes Problem: Wenn ich das richtig sehe, kann ich die Dateinamen in einem Archiv als UTF-8 auslesen. Das Problem ist, dass ich TCHAR verwende, also je nachdem, ob mein Programm mit oder ohne _UNICODE Makro compiliert wird, verwendet es entweder 1 oder 2 byte pro Schriftzeichen.

Im Unicode Modus werden die UTF8-Dateinamen also komplett unleserlich, im ANSI-Modus funktioneirne eben nur die ANSI-Zeichen, und alle anderen Zeichen (é, ®) werden durch zwei andere ANSI-Zeichen ersetzt (deswegen meine ich, dass 7z Dateinamen als UTF-8 abspeichert).


Lange Rede, kurzer Sinn: Wo bekomm ich ne Systemunabhängige UTF8>Unicode(konstant 2 bytes pro Zeichen) Konversionsfunktion her?
Ist sowas schon in tchar.h oder wchar.h enthalten?
 
UTF-8 ist eine Darstellung von Unicode. Du kannst in andere Unicode-Darstellungen konvertieren, falls du das willst, z.B. UTF-16 oder UTF-32.

Unicode braucht immer 1-4 Bytes pro Schriftzeichen. Das wären 1-4 UTF-8 Wörter, 1-2 UTF-16 Wörter oder 1 UTF-32 Wort. Ein Unicode-Zeichen ist nicht grundsätzlich in 2 Byte darstellbar. Du solltest dir mal das hier durchlesen:
http://de.wikipedia.org/wiki/Unicode
http://de.wikipedia.org/wiki/UTF8

In wchar.h sind keine derartigen Konvertierungsfunktionen enthalten. (Ist TCHAR irgendeine Microsoft Eigenart?)

Schau dir mal die libiconv an, die sollte alles können was du willst und sie ist plattform-unabhängig:
http://www.gnu.org/software/libiconv/
Oder hier als Binary:
http://www.gimp.org/~tml/gimp/win32/libiconv-1.9.1.bin.woe32.zip
 
Danke danke danke :)

Bin ich mit meinem Halbwissen doch schon wieder ner Microsoft-only Header-Datei erlegen...
 
Im Win32 API ist die Funktion MultiByteToWideChar() vielleicht interessant.
Ist aber natürlich nicht systemunabhängig.

MfG

Arnd
 
Zurück
Oben