VBA Sonderzeichen in Hexform im String/Datei

Hallo zusammen,

ich arbeite gerade an einem VBA-Programm (Translationtool), welches mir eine *.po Datei ausliest und die dort enthaltenen Daten in eine Exceltabelle schreibt und andersherum, so dass ich aus der Exceltabelle die *.po Datei erstellen kann.

Ich habe nun das Problem, dass in der Quelldatei folgendes steht:
anstatt ä steht hier „=C3=A4“
anstatt ? steht hier „=C3=9F“
usw.

Ich lese die Quelldatei Zeilenweise aus und nun ist die Frage, was genau ich machen muss, damit er das Hexadezimale auch in das korrekte Zeichen umwandelt und mir in der Exceltabelle darstellt. Das ganze muss ich am Ende natürlich umgekehrt in eine Datei schreiben.

Vielen Dank schon mal
Gruß
Wilhelm

Hallo Wilhelm,

sorry - da kann ich dir leider nicht weiterhelfen.

Gruß,
Karsten

vllt nochmal als hinweis hierzu:

Ich habe folgendes z.B. in der Zelle/Variablen:
s = „vielen Dank f=C3=BCr Ihre Anfrage.“

Hallo Wilhelm,

*.po-Dateien entstammen poedit, einem Übersetzungsprogramm, das plattform-unabhängig ist. Daten werden in diesen Dateien als UTF-8 gespeichert (vgl. http://www.poedit.net/ und http://de.wikipedia.org/wiki/UTF-8)

Am Beispiel ä:
0xC3 0xA4 = 11000011 10100100 = U+00E4 = ä
(vgl. www.unicode.org/charts/)

Da Windows intern mit Unicode-Zeichenfolgen arbeitet, wirst Du nicht umhin kommen, Unicode-UTF-8-Kovertierungen zu programmieren. Wenn Du nur westeuropäische Sprachen übersetzt, reicht eine simple Funktion, die in der eingelesenen Zeile ein =C3=A4 durch ä ersetzt (replace).
Solltes Du osteuropäische Sprachen(Polnisch, Bulgarisch, Türkisch, etc.) oder Chinesisch, Japanisch, etc. haben, dann wird das kein leichtes Unterfangen in VBA.

Sollte letzteres der Fall sein, dann melde Dich noch einmal - ich schreibe gerade ein Verwaltungstool für internationale Textbausteine. Vielleicht kannst Du da was brauchen.

Gruß
Harry

Hallo,

hab ich auch noch nicht gemacht, vielleciht hilft das:

http://social.msdn.microsoft.com/Forums/en-US/isvvba…

Gruß

Hallo Harry,

vielen Dank für die Antwort. Vorerst wird mir diese Lösung auf jeden Fall weiterhelfen, da wir zunächst nur auf den westeuropäischen Markt aktiv werden wollen.

Ich werde irgendwann nochmal auf dich zurückkommen. :wink:

Gruß
Wilhelm

Hallo,
danke für die Antwort.
Mit diesen Funktionen hatte ich es schon ausprobiert, hatte aber nicht wie gewünscht funktioniert.

Gruß
Wilhelm

Hallo Wilhelm,

tut mir leid, daß ich so spät antworte. Ich muß gestehen, daß ich meist schnellstmöglich ins Forum gehe und daher Deine Anfrage übersehen habe.

Zur Sache:

anstatt ä steht hier „=C3=A4“
anstatt ? steht hier „=C3=9F“

Ich würde eine Subroutine schreiben, der Du die ausgelesene Zeile übergibst.
Am Anfang der Subroutine steht ein zweidimensionaler Array, in dem die zu suchenden und die zu ersetzenden Zeichen gespeichert sind.

Da anscheinend alle Umlaute mit dem Gleichheitszeichen beginnen, würde ich die Zeile mit INSTR darauf untersuchen.
Den String bis zum Gleichheitszeichen würde ich mit LEFT in einer Ergegnisvariable abspeichern.
Dann würde ich mit MID die nächsten drei oder sechs Zeichen auslesen.
Dann würde ich im Array nachgucken, wie der Ersatz lautet.
Dann würde ich den Erasatz an die Ergebnisvariable anhängen und mit dem verbleibenden Rest weitermachen.

Das sollte das einfachste sein. Allerdings mußt Du für den Fall, daß das Gleichheitszeichen als Gleichheitszeichen erhalten bleiben soll, vorsorgen.

HTH.

Markus