thepinky
Goto Top

Umlaute richtig darstellen, bei ASCII.encoding

Hallo zusammen,

habe das Problem, dass mir nach dem encoding ß und Umlaute als Fragezeichen dargestellt werden.
Habe es auch mit UTF8 probiert, wobei sich nichts geändert hat.

Gibt es hierfür eine Lösung?

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
                                ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
                                Handles Serialport1.DataReceived

        Dim enc As System.Text.Encoding = New System.Text.ASCIIEncoding()
        'Test #######  
        'Dim enc As System.Text.Encoding = New System.Text.UTF8Encoding()  
        '########  
        Thread.Sleep(1000) 
        With Serialport1
            Try
                PufferString = .ReadExisting
                Me.Invoke(Datenanzeigen)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Fehler beim Empfangen ..."  
            End Try
        End With
    End Sub

Content-ID: 667837

Url: https://administrator.de/contentid/667837

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

13402570474
13402570474 03.09.2024 um 09:10:31 Uhr
Goto Top
Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
                                     ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
                                     Handles Serialport1.DataReceived

    ' Verwende UTF8-Encoding, um Umlaute korrekt zu empfangen  
    Dim enc As System.Text.Encoding = New System.Text.UTF8Encoding()

    ' Warte kurz, um sicherzustellen, dass alle Daten empfangen wurden  
    Thread.Sleep(1000)

    With Serialport1
        Try
            ' Verwende das Encoding, um die empfangenen Bytes korrekt in einen String zu konvertieren  
            Dim bytes() As Byte = .ReadExisting().Select(Function(c) CByte(AscW(c))).ToArray()
            PufferString = enc.GetString(bytes)
            Me.Invoke(Datenanzeigen)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")  
        End Try
    End With
End Sub
thepinky
thepinky 03.09.2024 aktualisiert um 14:12:47 Uhr
Goto Top
Danke für deine Antwort.
Aber wenn ich den Code übernehme, führt dies zu keiner Änderung!

Was kann ich noch prüfen oder anders machen?
14260433693
14260433693 03.09.2024 aktualisiert um 15:07:10 Uhr
Goto Top
Die Encoding-Property des SerialPort Objects schon richtig setzen dann wandeln die Funktionen den Text schon automatisch richtig um ...
SerialPort.Encoding Property
SerialPort1.Encoding = New System.Text.UTF8Encoding()

Gruß
thepinky
thepinky 03.09.2024 um 18:42:03 Uhr
Goto Top
@14260433693

verstehe leider nicht genau was du meinst.
Was muss ich in meinem Code anpassen.

Du hast ja C# verlinkt, ich nutze allerdings noch VB.NET spielt das eine Rolle?
14260433693
14260433693 03.09.2024 aktualisiert um 20:21:24 Uhr
Goto Top
Zitat von @thepinky:

@14260433693

verstehe leider nicht genau was du meinst.
Was muss ich in meinem Code anpassen.
Alter Schwede. Dort wo du den SerialPort erstellst obige Zeile danach ergänzen ...
Du hast ja C# verlinkt, ich nutze allerdings noch VB.NET spielt das eine Rolle?
.NET ist das gleiche ob VB.Net oder C# beide nutzen das NET Framework nur die Syntax ist etwas unterschiedlich, also nein, spielt keine Rolle. Die Doku ist universell!
thepinky
thepinky 04.09.2024 aktualisiert um 13:57:51 Uhr
Goto Top
So sehen die Ergebnisse aus:

Vor dem senden: Gehäuse

Mit ASCII.encoding empfangen: Geh?use

Mit Serialport1.Encoding = New System.Text.UTF8Encoding() empfangen: Geh use es wird hier leider nicht angezeigt. Das Fragezeichen befindet sich jetzt in einem Rahmen.

Was ist da los?
14260433693
14260433693 04.09.2024 aktualisiert um 14:47:09 Uhr
Goto Top
Dann ist die quelle kein UTF8. Probiere andere Encodings durch . z.b. ANSI oder UNICODE usw. oder lass dir statt Strings die übertragenen Bytes ausgeben (ReadByte() Methode).

Hat die Konsole or whatever in der du das Ergebnis ausgibst überhaupt das richtige Encoding/Codepage für Zeichen außerhalb des ASCII Zeichenraums?? Du lieferst hier auch zu wenig Informationen über die Quelle woher die Daten stammen.
thepinky
thepinky 05.09.2024 um 12:25:12 Uhr
Goto Top
Zum testen habe ich den Pufferstring einmal in der MessageBox ausgeben lassen, dies ändert nichts am Ergebnis.

Desweiteren habe ich mir mal die zugewiesen Werte für die Variable "bytes" angeschaut. (Code von stacktrace)
Diese Zahlenfolge kann ich anhand der ASCII Tabelle in meinen Text übersetzen.

Sind das Informationen womit die Experten mir weiterhelfen können?
14260433693
14260433693 05.09.2024 aktualisiert um 12:36:27 Uhr
Goto Top
Zitat von @thepinky:
Desweiteren habe ich mir mal die zugewiesen Werte für die Variable "bytes" angeschaut. (Code von stacktrace)
Diese Zahlenfolge kann ich anhand der ASCII Tabelle in meinen Text übersetzen.
Das Byte Ergebnis ist aber nicht das was über die Leitung gegangen ist sondern aus der von der SerialPort Funktion generierten Strings umgewandelt wurde. Lese die Bytes direkt die der SerialPort dir übergibt, s. Hinweis von mir oben => ReadByte() Methode.