Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TEncoding.ASCII.GetBytes liefert falsches Resultat (https://www.delphipraxis.net/150738-tencoding-ascii-getbytes-liefert-falsches-resultat.html)

chaosben 25. Apr 2010 16:13


TEncoding.ASCII.GetBytes liefert falsches Resultat
 
... jedenfalls denk ich das.
Wenn ich das machen
Delphi-Quellcode:
TEncoding.ASCII.GetBytes('ö')[0]
kommt 111 heraus. Das wiederum ist ein kleines o. Erhofft habe ich mir aber den Wert 246 - also ein kleines ö. Was mache ich falsch?

Der Hintergrund der Sache ist dieser: Ich nutze TidURI von Indy10 (aus dem SVN) um eine URL zu kodieren. Dummerweise wird dabei aus "Görlitz" "G%6Frlitz" und nicht "G%F6rlitz". Aufrufen tu ich es so:
Delphi-Quellcode:
TIdURI.URLEncode('http://blabla?account=' + account + '&password=' + pwd, TEncoding.ASCII)

Valle 25. Apr 2010 16:36

Re: TEncoding.ASCII.GetBytes liefert falsches Resultat
 
Hi,

vorweg muss ich leider sagen dass ich keine Ahnung von TEncoding oder irgendwas der gleichen habe. Was ich dir aber sagen kann, ist, dass ASCII eine 7-Bit Zeichenkodierung ist. In 7 Bit passen bekanntlich 128 verschiedene Zahlen - und da liegt 246 für das kleine ö offensichtlich drüber. ;-) Was du brauchst ist also wahrscheinlich ein anderes Encoding, zumindest wenn sich dieses "TEncoding" an die Standards hält.

Hope it helps! :)

Liebe Grüße,
Valle

Khabarakh 25. Apr 2010 16:55

Re: TEncoding.ASCII.GetBytes liefert falsches Resultat
 
Das Encoding für die aktuelle Code Page ist TEncoding.Default.

daywalker9 25. Apr 2010 17:04

Re: TEncoding.ASCII.GetBytes liefert falsches Resultat
 
TEncoding.Unicode liefert dir das richtige Ergebniss

himitsu 25. Apr 2010 17:09

Re: TEncoding.ASCII.GetBytes liefert falsches Resultat
 
Zitat:

Zitat von daywalker9
TEncoding.Unicode liefert dir das richtige Ergebniss

Dafür braucht er aber kein TEncoding, denn das 'ö' ist ja schon Unicode.

Also hör auf Khabarakh
und dieses ASCII hat nur 7 Bit, womit es da kein ö gibt.

Delphi-Quellcode:
TEncoding.Default.GetBytes('ö')[0]
Delphi-Quellcode:
Var E: TEncoding;
  B: TBytes;
  A: AnsiChar;

Begin
  E := TMBCSEncoding.Create(28591); // ISO 8859-1 Latin 1; Western European (ISO)
  B := E.GetBytes('ö');
  E.Free;
  A := AnsiChar(B[0]);

chaosben 25. Apr 2010 18:45

Re: TEncoding.ASCII.GetBytes liefert falsches Resultat
 
Ei wunderbar ... danke schön! :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz