German Extended ASCII Code benutzen

GKCS

Member
Licensed User
Longtime User
Hallo,

wie kann ich unter B4A extended ASCII Codes (128-255) fuer Stringoperationen benutzen?

B4X:
   code=Chr(255)
   
   buffer = code.GetBytes("ASCII")
   all=BytesToString(buffer,0,buffer.Length,"ASCII")
   File.WriteString(File.DirRootExternal, "1.txt",all)

Schreibt mir zwar das 1Byte File, aber nicht mit CHR(255) sondern mit "?" (chr(63))

Die Verwendung von ISO-8859-1 generiert mir kein ANSI/ASCII codiertes File, sondern ein 2Bytes UTF-8 codiertes File.

Die Frage ist, wie kann ich Extended ASCII Codes (128-255) fuer Stringausgaben (z.B. serielle Steuersequenzen) benutzen?

Danke fuer jede Hilfe

Gerry
 

GKCS

Member
Licensed User
Longtime User
extended ASCII

Hallo Klaus,

erstmal danke fuer Dein Vorschlag. Allerdings funktioniert es so auch nicht.

B4X:
all=Chr(255)
   
   buffer = all.GetBytes("ASCII")
   all=BytesToString(buffer,0,buffer.Length,"ASCII")

   Dim Writer As TextWriter
   Writer.Initialize2(File.OpenOutput(File.DirRootExternal,"2.txt" ,False),"ISO-8859-1")
   Writer.Write(all)
   Writer.Close

   File.WriteString(File.DirRootExternal, "1.txt",all)

produziert 2mal genau die gleiche 1Byte Datei mit chr(63) "?" drin .... und nicht chr(255) ...

Wichtig waere auch noch, extended ASCII Werte nicht nur in einer Datei zu speichern, sondern direkt als String "irgendwohin" zu senden ....

Trotzdem erstmal vielen Dank fuer die Hilfe ....

Gerry
 

GKCS

Member
Licensed User
Longtime User
extended ASCII

Hallo Klaus,

sorry, da hat sich bei mir noch ein Fehler eingeschlichen.

B4X:
   all=Chr(255)
   
   buffer = all.GetBytes("ISO-8859-1")
   all=BytesToString(buffer,0,buffer.Length,"ISO-8859-1")

   Dim Writer As TextWriter
   Writer.Initialize2(File.OpenOutput(File.DirRootExternal,"2.txt" ,False),"ISO-8859-1")
   Writer.Write(all)
   Writer.Close

   File.WriteString(File.DirRootExternal, "1.txt",all)

funktioniert nun soweit. Aber es bleiben noch ein paar Fragen offen:

1. Warum funktioniert das Encoding als TextWriter Objekt fuer ISO-8859-1 korrekt, aber als File.WriteString mit selbigem Encoding nicht?

2. Gibt es irgendeine Moeglichkeit, B4A zu veranlassen, ein String generell als extended ASCII zu kodieren, OHNE den Umweg ein File zu schreiben? Denn, wenn ich das File wieder einlese und den String intern weiterbehandle (NICHT als Stream, sondern als plain STRING), geht mir genau diese extended ASCII Kodierung wieder verloren.

Vielen Dank und ein schoenen Sonntag

Gerry
 

klaus

Expert
Licensed User
Longtime User
Intern funktioniert Android und natürlich auch Basic4Android mit UTF-8 Encoding.
So viel Ich weiss kannst Du das nicht ändern.
Du brauchst das Encoding nur wenn Du mit externen Dateinen, Programmen oder Geräten kommunizieren willst die dieses Encoding brauchen (zum lesen oder zum schreiben).

In Deinem Beispile mit all=BytesToString(buffer,0,buffer.Length,"ISO-8859-1") das heisst dass der buffer das "ISO-8859-1" Encoding hat und nich der all String !

Beste Grüsse.
 

GKCS

Member
Licensed User
Longtime User
extended ASCII

Hallo Klaus,

ok, was natuerlich heisst, dass Librarys mit Befehlen, welche etwas nach "extern verschicken" und ein String als Parameter benutzen, nicht wirklich sinnvoll sind.

B4X:
   buffer = all.GetBytes("ISO-8859-1")
   all=BytesToString(buffer,0,buffer.Length,"ISO-8859-1")

Auch ist gerade obige Routine zum Umkodieren relativ sinnlos, da genau dieses Umkodieren eines Strings nicht stattfindet.

Was aber trotzdem verwunderlich ist, b.z.w. nicht ganz korrekt sein kann, denn

B4X:
   buffer = all.GetBytes("ASCII")
   all=BytesToString(buffer,0,buffer.Length,"ASCII")

liefert ein anderes Ergebniss in "all" als wenn ich "ISO-8859-1" oder "UTF8"
fuer beide CharSets benutze.

Nach Deiner Erwklaerung waere zu erwarten, dass "all" in jedem Fall wieder als "UTF8" gebildet wird.

Beste Gruesse

Gerry
 

klaus

Expert
Licensed User
Longtime User
Nach Deiner Erwklaerung waere zu erwarten, dass "all" in jedem Fall wieder als "UTF8" gebildet wird.
Das ist auch der Fall.
Aber wenn zum Beispiel die Daten im Buffer mit ISO-8859-1 encodiert sind und Du gibst aber an dass das Encoding ASCII wäre dann ist die Umwandlung nach UTF-8 falsch weil die verschiedenen Bytes nicht die gleiche Bedeutung haben.

Beste Grüsse.
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…