Verschiedene Sprachen über TCP/IP verschicken!

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

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

    Verschiedene Sprachen über TCP/IP verschicken!

    Moin! :)
    Wie kann ich es schaffen dass ein TCP-String in allen Sprachen ordentlich versendet wird?
    Also ob Arabisch, Hebräisch, Chinesisch und weitere(auch ÄÖÜäöü).
    Gibt es da eine passende Encoding Einstellung?
    Freue mich auf eure Hilfe!
    BIG THX

    Code:

    VB.NET-Quellcode

    1. Dim text As String = System.Text.Encoding.ASCII.GetString(rcvbytes)

    String Inhalt: :!:
    ÄÖÜ?@Eداخل€,yxc<<>?=0*/-+Пёсمعلقة洪德Гандзі

    Nach dem Senden: :!:
    ÄÖÜ?@E????€,yxc<<>?=0*/-+?????????


    *Topic verschoben*
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich habe nun eine Notlösung gefunden.
    Ich denke mit dieser Lösung kann man leben.
    Da es sich ja um ein Passwortfeld handelt.

    1. Der Textbox Zeichen erlauben(alle die ich benötige).
    2. Die Einstelllung "ShortcutsEnabled" auf false.
    3. Die Einstellung "PasswordChar" auf * festelgen.
    Ich hoffe ich könnte mit meiner Notlösung, auch anderen geholfen haben.
    :thumbup:

    VB.NET-Quellcode

    1. Private Sub txtSonstigesTCPPasswort_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtSonstigesTCPPasswort.KeyPress
    2. ' Erlaube nur legalle Zeichen!
    3. Select Case Asc(e.KeyChar)
    4. Case 8, 32, 48 To 57, 65 To 90, 97 To 122, 223, 228, 196, 252, 220, 214, 246
    5. ' 8 Backspace
    6. ' 32 Leerzeichen
    7. ' 48-57 Ziffern
    8. ' 65-90 Buchstaben (groß)
    9. ' 97-122 Buchstaben (klein)
    10. ' 223 ß
    11. ' Deutsche Umläute
    12. Case Else
    13. ' Alle anderen Eingaben werden unterdrückt
    14. e.Handled = True
    15. End Select
    16. End Sub

    Visual Basic.NET 8o
    MS-SQL
    8o
    @Cheffboss Es ist egal, welches Encoding Du nimmst, es muss nur auf beiden Seiten dasselbe sein.
    Und es muss sichergestellt sein, dass alle gesendeten Zeichen unterstützt werden, ansonsten kommen da ? oder Quadrate oder so raus.
    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!
    Super, das ich nun doch die Richtige Lösung habe. :thumbup:
    Dann kann ich das mit dem Zeichen der TextBox-Prüfung wieder rausnehmen!

    @Bluespide
    Ich habe es gerade mit „UTF8“ getestet, jetzt geht es so wie ich es möchte.

    @RodFromGermany
    Habe es nun getestet, jetzt mit dem richtigen Encoding klappt alles.

    @an alle
    Warum gibt es so viele Encoding Einstellungen?
    Liegt das an den verschiedenen Sprachen die es gibt?
    Und was sollte man als Standard auswählen im Deutschensprachbereich mit Umläute.
    Vielen Dank, an euch!
    Visual Basic.NET 8o
    MS-SQL
    8o
    Mit dieser Methode kann eine grosse Breite des UniCode mit Random abgedeckt werden.
    Es ist mir nicht bekannt, dass je eine Kombination mit UTF8 encodet wie auch decodet nicht wieder das gleiche ergaben.

    Freundliche Grüsse

    exc-jdbi

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Public Function GetRngChar(ByVal size As Int32) As Char()
    2. If size < 1 Then Throw New Exception(NameOf(size))
    3. Dim ch As Char
    4. Dim min As Int32 = 32
    5. Dim res = New Char(size - 1) {}
    6. Dim max As Int32 = Convert.ToInt32(Char.MaxValue)
    7. For i As Int32 = 0 To size - 1
    8. ch = Convert.ToChar(-Rand - .Next(min, max))
    9. If Char.IsLetterOrDigit(ch) OrElse
    10. Char.IsWhiteSpace(ch) Then
    11. res(i) = ch
    12. Else : i -= 1
    13. End If
    14. Next
    15. Return res
    16. End Function

    Cheffboss schrieb:

    Warum gibt es so viele Encoding Einstellungen?
    Das ist historisch gewachsen.
    Früher war Speicherplatz teuer, und man stellte fest, dass es je nach Sprache nur 2%-0% Sonderzeichen gab, die nicht in ein Byte passen. Das fand man nervig, für die paar Ausnahmen bei jedem Buchstaben quasi ein leeres Byte dazuzustellen.
    Daher hat man Encodings verwendet, die es iwie hinkriegen, für Sonderzeichen mehrere Bytes zu nehmen, für die Masse der Buchstaben aber nur eines.
    Inzwischen wurde Plattenplatz immer billiger, und die Chinesen wichtiger, daher ist utf8 (schnelle Komprimierung, aber nicht so kompakt wie zB utf-7) inzwischen wohl das meist-verwendete Encoding.
    Vielleicht auch nicht, die historischen Encodings sich auch immer noch extrem weit verbreitet.