Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi UTF-8 nach ASCII (die 1000ste) (https://www.delphipraxis.net/191804-utf-8-nach-ascii-die-1000ste.html)

jfheins 21. Feb 2017 20:33

AW: UTF-8 nach ASCII (die 1000ste)
 
Wäre es nicht eigentlich sinnvoll, wenn ein Encoding einen String entgegennimmt und ein byte-Array zurück gibt?
Wenn da wieder ein String rauskommt, ist das doch eigentlich wieder Interpretationssache, was da drin steht.

Also string + Zeichnsatz = Bytes
Und Bytes + Zeichensatz = String

p80286 21. Feb 2017 22:32

AW: UTF-8 nach ASCII (die 1000ste)
 
Zitat:

Zitat von jfheins (Beitrag 1362280)
Wäre es nicht eigentlich sinnvoll, wenn ein Encoding einen String entgegennimmt und ein byte-Array zurück gibt?
Wenn da wieder ein String rauskommt, ist das doch eigentlich wieder Interpretationssache, was da drin steht.

:thumb:

Es kommt darauf an welche Codierung die gewählte Schrift unterstützt.

Gruß
K-H

ernschd 22. Feb 2017 08:24

AW: UTF-8 nach ASCII (die 1000ste)
 
Um die ganzen Verwirrungen (hoffentlich) ein wenig aufzudecken:

Ich habe einen UTF-8 kodierten String, als Beispiel "BÜCHER". Dieser muss in einen DOS-Zeichensatz umgewandelt werden, damit ich für das große "Ü" in Codepage 437 das Hex Zeichen 9A bzw. (extendet) ASCII-Zeichen 154 bekomme.
Wenn man dieses in einem Editor als ANSI anzeigt, wird es als "š" dargestellt, in UTF-8 als "x9A".

Sherlock 22. Feb 2017 08:58

AW: UTF-8 nach ASCII (die 1000ste)
 
Als ich das letzte mal nachgesehen hatte (vor 1 Minute) war das große Ü ASCII 220 bzw xDC... auch in der Codepage 437.
In UTF-8 ist das U+00DC oder eben c39c.
Kurz: Keine Deiner Zahlen entspricht in den benannten Codetabellen dem Ü.

Da läuft etwas konzeptionell falsch.

Sherlock

ernschd 22. Feb 2017 09:16

AW: UTF-8 nach ASCII (die 1000ste)
 
Ich habe in der verlinkten Tabelle nachgesehen: https://de.wikipedia.org/wiki/Codepage_437, dort ist es 154 bzw. 9A. Laut der Beschreibung ist 00DC der Unicode-Wert.

Sherlock 22. Feb 2017 09:31

AW: UTF-8 nach ASCII (die 1000ste)
 
d'uh... hab die Tabelle falsch gelesen :stupid:

Ich habe auch mal UTF8 nach ASCII konvertieren müssen, bei mir sahen die Strings aber so aus: 'Gl\xC7\, cknerin' -> 'Glöcknerin' Das kann man dann mit Delphi-Referenz durchsuchenTJSONOBject.ParseJSONValue verwurschteln...hilft Dir jetzt aber nicht.

:gruebel:

Sherlock

p80286 22. Feb 2017 10:39

AW: UTF-8 nach ASCII (die 1000ste)
 
Zitat:

Zitat von ernschd (Beitrag 1362306)
Ich habe in der verlinkten Tabelle nachgesehen: https://de.wikipedia.org/wiki/Codepage_437, dort ist es 154 bzw. 9A. Laut der Beschreibung ist 00DC der Unicode-Wert.

Um Mißverständnissen vorzubeugen, wichtig ist, was in der Datei steht, wenn es korrekt ist.

Gruß
K-H

ernschd 22. Feb 2017 10:46

AW: UTF-8 nach ASCII (die 1000ste)
 
Das habe ich in diesem Post bereits geschrieben.

Fritzew 22. Feb 2017 10:48

AW: UTF-8 nach ASCII (die 1000ste)
 
Delphi liefert doch alles mit:

Declariere einen Stringtyp für die gewünschte Codepage:

Delphi-Quellcode:

 type
    oemString = type Ansistring(437) ;

   function StringtoOem(const Value : string) : oemString;
 begin
     result := Value;
 end;
einfach zugewiesen und glücklich sein.

Ergebnis :

OEM
Decimal
66 154 67 72 69 82

HEX
$42 $9A $43 $48 $45 $52

ANSI
Decimal
66 220 67 72 69 82

HEX
$42 $DC $43 $48 $45 $52

ernschd 22. Feb 2017 11:15

AW: UTF-8 nach ASCII (die 1000ste)
 
Wenn ich das ganze mit einem kleinen Testprogramm versuche, bekomme ich leider ein anderes Ergebnis (Hexadezimal DC statt 9A):

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses System.SysUtils;

type oemString = type Ansistring(437) ;

var f: TextFile;
  ein: string;
  aus: oemString;

function StringtoOem(const Value : string) : oemString;
begin
    result := Value;
end;

begin
  AssignFile(f, 'c:\temp\kodier.txt');
  Rewrite(f);
  ein := 'Ü';
  aus := StringtoOem(ein);
  writeln(f, aus);
  CloseFile(f);
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr.
Seite 3 von 4     123 4      

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