vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Teil 2: Weitere Ergebnisse 
Autor: Preisser
Datum: 23.05.09 16:24

Teil 2:
Dies gilt natürlich auch für das Winsock-Steuerelement, denn wenn man mit diesem einen String versendet, dann sendet es diesen ja nicht als Unicode-String, sondern konvertiert diesen zurück ins ANSI-Format. Wenn man dann auf einem anderen System die Daten zwischenspeichert und als Abgrenzung die Länge der Daten (also die Länge des Strings) mitsendet, dann funktioniert dies natürlich auf einem japanischen System nicht, da ja Byte-Folgen wie E4F6 (wie oben beschrieben) als 1 Zeichen interpretiert werden und der empfangene Text dann ja zu kurz wäre. Ich muss zugeben, dass ich dies auch bei meinem Tipp
Daten vollständig + fehlerfrei über Winsock senden fälschlicherweise so verwendet habe. Wenn man ein mit dem Code aus diesem Tipp erstelltes Programm z. B. zum Senden auf einem deutschen und zum Empfangen auf einem japanischen Windows verwendet, dann führt dies zu Fehlfunktionen.
[Code]'Senden
Winsock1.SendData Len(String) & " " & String

'Empfangen
Dim tmpString as String
Winsock1.GetData tmpString, vbStringDa hier ja binäre Daten übertragen werden, müsste man eigentlich auch den String binär senden, also
[Code]'Senden
Dim tmpArr() as Byte, tmpString as String
tmpString = StrConv(LenB(String) & " ", vbFromUnicode) & String
tmpArr = tmpString
Winsock1.SendData tmpArr

'Empfangen
Dim tmpString as String, tmpArray() as Byte
Winsock1.GetData tmpArray, vbArray + vbByte
tmpString = tmpArraySomit werden auch Unicode-Strings, die länderspezifische Zeichen enthalten, so übertragen, dass sie auf dem anderen System wieder eindeutig zugeordnet werden können. Wenn man damit Dateien übertragen will, muss man diese natürlich vorher mit der oben beschriebenen Methode binär einlesen.

Die StrConv-Funktion verhält sich natürlich in der Hinsicht genauso, so ergibt
[Code]Msgbox Len(StrConv(ChrB(228) & ChrB(246), vbUnicode))auf einem deutschen System 2, auf einem japanischen dagegen 1.
Da das Byte 228 hier also Teil eines 2-Byte-Zeichens ist, funktionieren auch so Sachen wie
Msgbox Asc(Chr(228))
auf einem japanischen Windows nicht (es kommt 0 heraus, statt 228).

Ich möchte noch darauf hinweisen, dass auch einige größere VB-Projekte wie z. b. das "CSocketMaster", eine API-Implementation des Winsock-Controls für VB, den oben beschriebenen Sachverhalt nicht beachten. Wenn man bei diesem der SendData Methode ein Byte-Array zum binären Senden übergibt, wird dies mit der StrConv-Methode nach Unicode konvertiert und einem String zugewiesen und später die Länge dieses Strings für Pufferzwecke mit der Len-Funktion ausgelesen bzw. der String mit der Mid-Funktion geteilt. Das führt dazu, dass der Code dann auf z. b. japanischen Systemen nicht funktioniert. Stattdessen müsste das Byte-Array einfach direkt einem String zugewiesen und dann die Länge mit der LenB-Funktion ermittelt bzw. der String mit der MidB-Funktion geteilt werden.

Beitrag wurde zuletzt am 23.05.09 um 17:58:01 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Probleme mit Unicode-Strings auf ausländischen Systemen3.155Preisser01.05.09 18:28
Teil 2: Probleme mit Unicode-Strings auf ausländischen Syste...2.050Preisser01.05.09 18:29
Re: Teil 2: Probleme mit Unicode-Strings auf ausländischen S...1.952Preisser04.05.09 20:56
Re: Teil 2: Probleme mit Unicode-Strings auf ausländischen S...1.880moDiag05.05.09 10:27
Re: Teil 2: Probleme mit Unicode-Strings auf ausländischen S...2.056ModeratorDieter05.05.09 10:40
Teil 1: Weitere Ergebnisse2.126Preisser23.05.09 16:23
Teil 2: Weitere Ergebnisse1.925Preisser23.05.09 16:24

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel