AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

UTF-8 nach ASCII (die 1000ste)

Ein Thema von ernschd · begonnen am 21. Feb 2017 · letzter Beitrag vom 22. Feb 2017
Antwort Antwort
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#1

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

  Alt 21. Feb 2017, 10:08
Delphi-Quellcode:
function GetFieldByName(const FieldName: string): String;
var s: String;
begin
    s := Utf8ToAnsi(GetFields(self.GetFieldIndex(FieldName)));
    if FIsAscii then s := OEM2Ascii(S);
    Result := s;
end;
Der Rückgabewert der Methode GetFields liefert einen String.

Geändert von ernschd (21. Feb 2017 um 10:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 21. Feb 2017, 10:37
Zitat:
was leider nicht funktioniert.
Und das bedeutet?




Zitat:
Delphi-Quellcode:
function GetFieldByName(const FieldName: string): String;
var s: String;
begin
    s := Utf8ToAnsi(GetFields(self.GetFieldIndex(FieldName)));
    if FIsAscii then s := OEM2Ascii(S);
    Result := s;
end;
Utf8ToAnsi und dann in den String macht daraus wieder Unicode, aber nachdem Utf8ToAnsi für Informationsverlust gesorgt hat.
Delphi-Referenz durchsuchenUTF8ToString
Und dann wird das Unicode nach ANSI umgewandelt und an OEM2Ascii übergeben.

Was gibt GetFields für einen Typ zurück?
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (21. Feb 2017 um 10:40 Uhr)
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#3

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

  Alt 21. Feb 2017, 10:53
Bedeutet, dass ich BšCHER (ASCII) benötige, aber entweder BÜCHER (ANSI/Unicode) oder B_CHER bekomme.

GetFields liefert einen String.
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 21. Feb 2017, 10:53
Kannst du deine Texte nicht einer TStringList unterbringen, und mit TEncoding.ASCII als zusätzlichem Parameter abspeichern?

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#5

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

  Alt 21. Feb 2017, 11:03
Das wäre natürlich das einfachste, aber dafür müsste ich recht viele alte Units ändern, in denen direkt in eine Datei geschrieben wird, und der Aufwand dafür ist dann doch zu hoch.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

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

  Alt 21. Feb 2017, 11:21
Delphi-Quellcode:
function OEM2Ascii(const OEMString: AnsiString): AnsiString;
begin
  Result := OEMString;
  if Result <> 'then
    OemToCharA(PAnsiChar(Result), PAnsiChar(Result));
end;
Das ist kein OEM to ASCII !
Zugegeben es gibt in dem Bereich so viele eierlegende Wollmilchsäue, daß da der Überblick verloren gehen kann, aber ein wenig Genauigkeit könnte da nicht schaden.
(das ist eher ASCIItoANSI)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#7

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

  Alt 21. Feb 2017, 11:30
Deswegen frage ich ja hier nach
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 21. Feb 2017, 11:53
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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (21. Feb 2017 um 11:56 Uhr)
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#9

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

  Alt 21. Feb 2017, 11:57
function GetFields(I: cardinal): string; Habe es ebenfalls versucht mit:
function GetFields(I: cardinal): AnsiString;

Geändert von ernschd (21. Feb 2017 um 12:01 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz