Zeichenkonvertierung von UTF8 zu Latin-1 (iso-8859-1)

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Zeichenkonvertierung von UTF8 zu Latin-1 (iso-8859-1)

    Hallo,

    Ich verzweifle gerade am Konvertieren von Zeichenketten:
    Ich möchte eine Zeichenkette die vom SQL Server gelesen wurde und vermutlich im Format utf8 ist nach latin-1 (iso-8859-1) konvertieren.

    Meine Funktion dazu sieht so aus:

    VB.NET-Quellcode

    1. Private Function ZeichensatzAnpassen(ByVal utf8 As String) As Byte()
    2. Dim unicode As Encoding = Encoding.Default
    3. ' auch schon versucht mit Dim unicode As Encoding = Encoding.Unicode
    4. Dim unicodeBytes As Byte() = unicode.GetBytes(utf8)
    5. Dim iso8859 As Encoding = Encoding.GetEncoding("iso-8859-1")
    6. Dim result As Byte() = Encoding.Convert(Encoding.UTF8, iso8859, unicodeBytes)
    7. Return result
    8. End Function


    Leider werden alle Sonderzeichen durch ein Fragezeichen ersetzt. Das Latin1 nicht alle sonderzeichen kann ist mir klar, es sollte aber zumindest mit "äüöÖÄÜ" funktionieren.
    Hat jemand einen Tipp für mich, wie ich eine saubere Konvertierung hinbekomme?

    Schon Danke im Voraus!
    Lg
    @tScheckSn Konvertiere diese Zeichen nach UNICODE, da sind sie alle darstellbar.
    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!
    Die Zeichen sind in Unicode / UTF8. Da kann ich sie auch richtig darstellen
    Ich brauche sie aber Zwingend in latin-1, da das alte System, in dem sie verarbeitet werden sollen nur latin-1 lesen kann. Die Zeichen werden anschließend in eine Datei geschrieben.
    Nur wird bei meiner Funktion aus "Überprüfen" "?berpr?fen".
    Im Zeichensatz von latin-1 sind aber die "ü"-Zeichen vorhanden. Es wird also nur falsch konvertiert, und ich weis nicht was ich im code ändern soll.
    Edit:
    Hab die Lösung selbst gefunden, es war ein Tippfehler. Für alle die die Funktion evtl. braucehn:

    VB.NET-Quellcode

    1. Private Function ZeichensatzAnpassen(ByVal input As String) As Byte()
    2. Dim OriginalCodierung As Encoding = Encoding.GetEncoding("utf-8")
    3. Dim iso8859 As Encoding = Encoding.GetEncoding("iso-8859-1")
    4. Dim OriginalBytes As Byte() = OriginalCodierung.GetBytes(input)
    5. Dim result As Byte() = Encoding.Convert(OriginalCodierung, iso8859, OriginalBytes)
    6. Return result
    7. End Function


    Danke
    lg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tScheckSn“ ()

    tScheckSn schrieb:

    Die Zeichen sind in Unicode / UTF8
    Aha.
    Dann musst Du 2 Mal wandeln. Zunächst in UNICODE und von da nach Latin-1. Sonst geht Information flöten.
    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!