vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Character in einem String in Hexadezimal konvertieren 
Autor: crosstravel
Datum: 21.04.14 22:05

Hallo zusammen,

um Daten im UTF-8 Format weitergeben zu können, muss ich die vorkommenden Umlaute
durch den entsprechenden Hex-Wert ersetzten. Um das zu erreichen über gebe ich den
jeweiligen Text der nachstehenden Funktion. Leider funktioniert diese aber nicht.

So wird z.B. das "ä" im text nicht durch den Hex-Wert &hC3A4 ersetzt. Im Test steht
anschliessend einfach "&hC3A4" - jedoch nicht als Hex-Wert.

Kann mir jewmand sage, was ich hier falsch mache ?


Vielen Dank und Gruss
Rainer


Public Function UmlauteErsetzen(s As String) As String
    s = Replace(s, "Ä", "&hC384", , , vbBinaryCompare)
    s = Replace(s, "Ö", "&hC396", , , vbBinaryCompare)
    s = Replace(s, "Ü", "&hC39c", , , vbBinaryCompare)
    s = Replace(s, "ä", "&hC3A4", , , vbBinaryCompare)
    s = Replace(s, "ö", "&hC3B6", , , vbBinaryCompare)
    s = Replace(s, "ü", "&hC3BC", , , vbBinaryCompare)
    s = Replace(s, "À", "&hC380", , , vbBinaryCompare)
    s = Replace(s, "Â", "&hC382", , , vbBinaryCompare)
    s = Replace(s, "Ã", "&hC383", , , vbBinaryCompare)
    s = Replace(s, "È", "&hC388", , , vbBinaryCompare)
    s = Replace(s, "É", "&hC389", , , vbBinaryCompare)
    s = Replace(s, "Ê", "&hC38a", , , vbBinaryCompare)
    s = Replace(s, "Ë", "&hC38b", , , vbBinaryCompare)
    s = Replace(s, "Ò", "&hC392", , , vbBinaryCompare)
    s = Replace(s, "Ó", "&hC393", , , vbBinaryCompare)
    s = Replace(s, "Ô", "&hC394", , , vbBinaryCompare)
    s = Replace(s, "Õ", "&hC395", , , vbBinaryCompare)
    s = Replace(s, "Ù", "&hC399", , , vbBinaryCompare)
    s = Replace(s, "Ú", "&hC39a", , , vbBinaryCompare)
    s = Replace(s, "Û", "&hC39b", , , vbBinaryCompare)
    s = Replace(s, "à", "&hC3a0", , , vbBinaryCompare)
    s = Replace(s, "ã", "&hC3a3", , , vbBinaryCompare)
    s = Replace(s, "è", "&hC3a8", , , vbBinaryCompare)
    s = Replace(s, "é", "&hC3a9", , , vbBinaryCompare)
    s = Replace(s, "ê", "&hC3aa", , , vbBinaryCompare)
    s = Replace(s, "ì", "&hC3ac", , , vbBinaryCompare)
    s = Replace(s, "í", "&hC3ad", , , vbBinaryCompare)
    s = Replace(s, "î", "&hC3ae", , , vbBinaryCompare)
    s = Replace(s, "ò", "&hC3b2", , , vbBinaryCompare)
    s = Replace(s, "ó", "&hC3b3", , , vbBinaryCompare)
    s = Replace(s, "ô", "&hC3b4", , , vbBinaryCompare)
    s = Replace(s, "õ", "&hC3b5", , , vbBinaryCompare)
    s = Replace(s, "ù", "&hC3b9", , , vbBinaryCompare)
    s = Replace(s, "ú", "&hC3ba", , , vbBinaryCompare)
    s = Replace(s, "û", "&hC3bb", , , vbBinaryCompare)
    s = Replace(s, "ß", "&hDF", , , vbBinaryCompare)
    UmlauteErsetzen = s
End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Character in einem String in Hexadezimal konvertieren 
Autor: eierlein
Datum: 21.04.14 23:04

Wenn schon, dann so.

Public Function UmlauteErsetzen(s As String) As String
s = Replace(s, "Ä", CHR$(&hC3) & CHR$(&H84))
...
usw.
Es gibt auch eine API-Funktion.
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Character in einem String in Hexadezimal konvertieren 
Autor: crosstravel
Datum: 22.04.14 18:07

Hallo,

ich habe es mal mit Deinem Vorschlag versucht. Leider habe ich keinen Erfolg gehabt.
Nachstehend der produzierte String:

<Text1>G&hC383¼nter M&hC383¶rgele, D&</Text1>

Richtig sollte der Text "Günter Mörgele, .." lauten ?!

Irgendwas läuft da schief; nur was. Ich schaue den Text im XML-Editor an und komme auf
den Fehler. Wenn ich die Referenz aus dem Zielsystem (dorthin muss ich die Daten dann
exportieren) sieht der Hex-Code wie folgt aus:

47 C3 BC 6E 74 65 72 20 4D C3 B6 72 67 65 6C 65 = Günter Mörgele


Das Umformen vo "ü" und "ö" erfolgt wie folgt:

s = Replace(s, "ö", (Chr$(&HC3) & Chr$(&HB6)), , , vbBinaryCompare)
s = Replace(s, "ü", (Chr$(&HC3) & Chr$(&HBC)), , , vbBinaryCompare)

Wo könnte hier der Fehler liegen?

Danke für dein Feedback.

Gruss, Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Character in einem String in Hexadezimal konvertieren 
Autor: eierlein
Datum: 22.04.14 19:33

Irgendwas machst du falsch.

Testprogramm:

Option Explicit
 
Sub test()
Dim t As String, i As Long
t = "Günter Mörgele"
Dim UTF8Bom As String
UTF8Bom = Chr$(239) & Chr$(187) & Chr$(191)
 
 
Debug.Print t
t = UmlauteErsetzen(t)
Debug.Print t
 
Open "d:\##\cross.txt" For Output As #1
'Print #1, UTF8Bom  '----> Falls benötigt
Print #1, t
Close
 
For i = 1 To Len(t)
    Debug.Print Hex$(Asc(Mid$(t, i, 1))); " ";
Next
 
End Sub
 
Function UmlauteErsetzen(s As String) As String
s = Replace(s, "Ä", Chr$(&HC3) & Chr$(&H84))
'...
s = Replace(s, "ö", Chr$(&HC3) & Chr$(&HB6))
s = Replace(s, "ü", Chr$(&HC3) & Chr$(&HBC))
UmlauteErsetzen = s
End Function
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Character in einem String in Hexadezimal konvertieren 
Autor: crosstravel
Datum: 23.04.14 07:43

Hallo,

ich habe den Fehler gefunden; mir ist aber noch nicht klar, wie es geschehen kann. In der Function frage ich den Character "È" ab und, welch ein Wunder, das Programm findet anscheinend solch einen
Character (obwol der bei Günter Mörgele sicher nicht vorhanden ist). Also er findet das È und über-
schreibt diesen Wert - dadurch wird der Resultatstring korrupt.

Da ich diesen Sachverhalt erst spät in der Nacht erkannt habe, konnte ich noch nicht alle Details
abklären - da klemme ich mich in den nächsten Tagen dahinter.

Nachmals vielen dank für Deine Hilfestellung. Ich habe als Übergangslösung mal das "È" aus der
Function entfernt (kommt ja kaum vor).

Gruss
rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel