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?
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667837
Url: https://administrator.de/contentid/667837
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
9 Kommentare
Neuester Kommentar
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
Die Encoding-Property des SerialPort Objects schon richtig setzen dann wandeln die Funktionen den Text schon automatisch richtig um ...
SerialPort.Encoding Property
Gruß
SerialPort.Encoding Property
SerialPort1.Encoding = New System.Text.UTF8Encoding()
Gruß
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 ...@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?
.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!
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.
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.
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.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.