Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

ernschd 21. Feb 2017 11:30

AW: UTF-8 nach ASCII (die 1000ste)
 
Deswegen frage ich ja hier nach :wink:

himitsu 21. Feb 2017 11:53

AW: UTF-8 nach ASCII (die 1000ste)
 
Nochmal.
Wie ist GetFields deklariert?


Wenn du selber Decodieren willst, dann müssen auch die richtigen Typen verwendet werden, sonst führt Delphi implizit eine Convertierung durch und zerstört somit die Daten.
und wenn der Debugger einen UTF8String oder einen AnsiString mit UTF-8 drin findet (StringToUTF8 setzt im AnsiString die CodePage richtig auf CP_UTF8), dann wird das im Debugger decodiert und als Unicode angezeigt.

ernschd 21. Feb 2017 11:57

AW: UTF-8 nach ASCII (die 1000ste)
 
Delphi-Quellcode:
function GetFields(I: cardinal): string;
Habe es ebenfalls versucht mit:
Delphi-Quellcode:
function GetFields(I: cardinal): AnsiString;

ernschd 21. Feb 2017 15:24

AW: UTF-8 nach ASCII (die 1000ste)
 
Kann mir denn sonst jemand einen Tipp geben, wie ich OEM2Ascii umsetzen kann?

freimatz 21. Feb 2017 15:45

AW: UTF-8 nach ASCII (die 1000ste)
 
Was denn nun? OEM2Ascii oder UTF-8 nach ASCII.
Und wie willst Du das Wort "Bücher" denn in ASCII haben?

ernschd 21. Feb 2017 16:18

AW: UTF-8 nach ASCII (die 1000ste)
 
UTF-8 nach ASCII, (BÜCHER -> BšCHER).

p80286 21. Feb 2017 16:23

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

Zitat von freimatz (Beitrag 1362252)
Was denn nun? OEM2Ascii oder UTF-8 nach ASCII.
Und wie willst Du das Wort "Bücher" denn in ASCII haben?

Wenn ich das richtig verstanden habe, dann hat er Daten die UTF-8 kodiert sind, und die will er in Dateien schreiben die OEM(ASCII) codiert sind. (sein sollen)
Letztlich benötigt er so etwas
Delphi-Quellcode:
OEMstring:=(UTF8toOEM(UTF8String);
bzw.
OEMString:=ANSItoOEM(UTF8toAnsi(UTF8String));
Da der Zeichenumpfang von UTF8 wesentlich größer ist als der von Ansi/OEM/ASCII, zusätzlich gibt es natürlich noch unterschiedliche Codepages für ANSI/ASCII/OEM, ist das erst einmal eine ganz heiße Nummer.
Da sollte/muß man im Vorfeld definieren was von dem was vorne hinein geht, auch hinten wieder heraus darf.

Gruß
K-H

xC3BC (UTF8) -> xFC (Ansi) -> x81(IBM ASCII)
ich vermute, das ist was Du willst.

freimatz 21. Feb 2017 16:32

AW: UTF-8 nach ASCII (die 1000ste)
 
Also ANSI/ASCII/OEM sind schon mal drei Paar Stiefel. Und was "š" sein soll ist mir noch unklar. Wenn ich es in Ultraedit kopiere zeigt das Hex den Wert #$9A an. Das ist aber kein ASCII.

ANSI: https://de.wikipedia.org/wiki/Americ...ards_Institute
ASCII: https://de.wikipedia.org/wiki/Americ...on_Interchange
OEM: https://de.wikipedia.org/wiki/Codepage_437

nahpets 21. Feb 2017 16:54

AW: UTF-8 nach ASCII (die 1000ste)
 
Verstehe ich das richtig?

Du hast aus 'ner SQLite-Datenbank UTF8.

Ausgeben möchtest Du per WriteLn ... OEM: https://de.wikipedia.org/wiki/Codepage_437

Also den unter DOS üblichen Zeichensatz?

Das wäre dann sowas in der Art:
Delphi-Quellcode:
function Ansi2OEM(AnsiString: string): string;
begin
  ANSIString := ANSIString + #0;
  CharToOEM(PChar(ANSIString), @ANSIString[1]);
  Delete(ANSIString, Length(ANSIString), 1);
  Result := ANSIString;
end;

function GetFieldByName(const FieldName: string): String;
var s: String;
begin
  s := Utf8ToAnsi(GetFields(self.GetFieldIndex(FieldName)));
  if FIsAscii then s := Ansi2OEM(s);
  Result := s;
end;
CharToOEM war zu Delphi 7-Zeiten in der Unit Windows zu finden.

ASCII https://de.wikipedia.org/wiki/Americ...on_Interchange ist aber (wie freimatz schon schrieb) <> OEM: https://de.wikipedia.org/wiki/Americ...on_Interchange

Da bei mehreren Post wiederholt Fragen auftraten, was genau das Ziel ist, beschreibe bitte noch einmal genau, von welchen Ausgangsdaten Du zu welchen Zieldaten gelangen möchtest.

Was ist genau das Quellsystem und was ist das Zielsystem? (Damit wir eine Vorstellung davon bekommen können, welche Ausgabe genau erforderlich ist.)

Was ergibt die Ausgabe von
Delphi-Quellcode:
Ord('š')
?
154 bzw. hexadezimal 9A? Das wäre dann aber in der Codepage 437 das große Ü. Das kleine ü wäre 129 bzw. hexadezimal 81.

Man müsste dann mal schauen, welcher Zeichensatz an der entsprechenden Stelle das kleine ü enthält.

HolgerX 21. Feb 2017 18:17

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

Irgendwo in den alten Sourcen gefunden:

Delphi-Quellcode:
function ANSI2ASCII(AText : AnsiString) : AnsiString;
var
  PText : PAnsiChar;
begin
  PText:=StrAlloc(length(AText)+1);
  StrPCopy(PText,AText);
  CharToOEMA(PText,PText);
  Result:=StrPas(PText);
  StrDispose(PText);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr.
Seite 2 von 4     12 34      

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