Hex in UTF8 TAB Problem

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    Hex in UTF8 TAB Problem

    Selbst auf die Gefahr hin, dass das Thema schon behandelt wurde und ich nur zu blöd bin die richtigen Suchbegriffe anzugeben mal eine Frage.

    Ich habe einen HEX Text.
    Diesen wandle ich in einen String um.

    VB.NET-Quellcode

    1. Dim text As New System.Text.StringBuilder(target.Length \ 2)
    2. For b = 0 To target.Length - 2 Step 2
    3. text.Append(Chr(Convert.ToByte(target.Substring(b, 2), 16)))
    4. Next
    5. Return text.ToString


    Dann habe ich dort noch keine Umlaute drin.
    Also konvertiere ich so

    VB.NET-Quellcode

    1. Dim SourceEncoding As Encoding = Encoding.UTF8
    2. Dim TargetEncoding As Encoding = Encoding.Default
    3. Dim stringiso As String = SourceEncoding.GetString(TargetEncoding.GetBytes(InputText))
    4. Return stringiso


    Jetzt ist der angezeigte Text schon recht leserlich. Nur ein TAB (hex: C28A) macht Probleme.
    Wenn ich den String in einer Textbox anzeige wird der TAB einfach ignoriert.
    In einer Richtextbox wird er als Leerzeichen angezeigt. Das würde mir auch genügen aber es müsste schon im String
    geändert werden, da ich diesen noch weiter verwenden will.

    Was kann ich tun ?
    Strings haben kein Encoding. Ein Tab-Zeichen ist immer ein Tab-Zeichen.
    Das Encoding kommt dann zum Tragen, wenn man Strings zu Bytes konvertieren will, und umgekehrt.
    {C2, 8A} als Encoding für das Tab-Zeichen erscheint mir sehr ungewöhnlich. Dekodiert man das mit UTF-8, dann kommt ein sogenanntes "Line Tabulation Set" Zeichen raus. Das ist ein vertikaler Tabstop. Siehe dazu fileformat.info/info/charset/UTF-8/list.htm bzw. fileformat.info/info/unicode/char/008a/index.htm .

    Siehe auch: String to Hex

    Wenn du Bytes vorliegen hast (oder in deinem Fall einen Base16-String), dann musst Du wissen, welches Encoding Du verwenden musst, um daraus wieder einen String zu machen.
    Dieses Encoding lautet wie?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Willkommen im Forum. :thumbup:

    doLob schrieb:

    Ich habe einen HEX Text.
    Diesen wandle ich in einen String um.
    Ein Text ist ein String.
    Ein Hex-String ist lediglich eine spezielle String-Repräsentation eines numerischen Wertes. Andere Möglichkeiten wären: Binär, oktal, dezimal.
    Vielleicht beschreibst Du mal ein wenig näher, was das für Strings sind und was damit passieren soll.
    ------
    &HC28A ist bei mir dieses Zeichen:

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    oder einfach so

    VB.NET-Quellcode

    1. MessageBox.Show(ChrW(&HC28A))


    Man müsste aber schon mehr über den String wissen und wie es weiter gehen soll um einen Vorschlag für ne Lösung zu machen.
    Ausserdem ist ein vbTab = 9.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()

    Genau.
    Da werde ich wohl mal etwas ausholen. Es geht um die EPG Textinfo im DVB-Stream. Im Header sind verschiedene Angaben. Unter anderem auch die Kodierung. Daher weiß ich, das es UTF8 ist. Die Umwandlung mit UTF8 Encoding klappt ja auch super.
    Alle Umlaute werden korrekt dargestellt. Nur das "Line Tabulation Set" Zeichen wird nicht umgesetzt sondern verschluckt. Wenn ich einen Textboxinhalt in UTF8 anzeige wird dort ja CR/LF verwendet Chr(&H0D) Chr(&H0A). In der ETSI "EN 300 468",
    Annex A-A1 steht auch was zu den verwendeten "Control Codes" , was ich aber schon mangels Englisch Kenntnissen nicht umsetzen kann. Muß ich das Array danach durchsuchen und dann die betreffenden Bytes austauschen oder gibt es da noch eine andere
    Herangehensweise?

    Ausschnitt aus EN
    Single Bytes Control Codes
    Control code:0x8A -> UTF8 Encoded Control code: 0xC2 0x8A -> Description: CR/LF

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „doLob“ ()

    Ja das passt. Es wird ein Leerzeichen eingefügt. Du wertest ja nur ein Byte (ChrW(138)-(&H8A) aus. Da aber auch fremdsprachige Texte möglich sind, also nicht nur die Kombination mit (&HC2) muß ich dieses ja auch berücksichtigen. Wie kann ich das kombinieren ?
    (&HC2) kommt ja wohl nie alleine vor, sondern immer mit einem Control Byte.