![]() |
ASCII <-> Ansi Umwandlung
folgende Unit wandelt ASCII nach Ansi und umgekehrt:
Delphi-Quellcode:
unit AsciiAnsi;
interface function Ascii2Ansi(const s:AnsiString):AnsiString; function Ansi2Ascii(const s:AnsiString):AnsiString; implementation uses Windows; function Ascii2Ansi(const s:AnsiString):AnsiString; begin Result := s; if Result <> '' then begin UniqueString(Result); OemToChar(Pchar(Result), Pchar(Result)); end; end; function Ansi2Ascii(const s:AnsiString):AnsiString; begin Result := s; if Result <> '' then begin UniqueString(Result); CharToOem(Pchar(Result), Pchar(Result)); end; end; end. |
Re: ASCII <-> Ansi Umwandlung
Ich bin dagegen das unreflektiert in die Codelib einzutragen, weil hier die Begriffe ANSI und ASCII falsch und mißverständlich benutzt werden. Abgesehen davon ist der OEM-Zeichensatz auf einem russischen System eben nicht identisch mit EASCII in westlicher Kodierung. Die Beschreibung als Konvertierung von ASCII nach ANSI und umgekehrt leitet also in die Irre ...
Zitat:
|
Re: ASCII <-> Ansi Umwandlung
Hi!
Auch nach regem Bemühen ist es Matze und mir leider nicht gelungen, wirklich den Code nachvollziehen zu können. Natürlich wollen wir den Code deswegen nicht "wegwerfen" - nur weil wir ihn nicht verstehen :stupid: Aus diesem Grund wäre es prima, wenn jemand näher erläutern könnte, was genau gemacht wird. Vor allem folgende Fragen haben sich mir gestellt:
Es wäre wirklich prima, wenn jemand das aufklären könnte! Vielen Dank! Ciao, Frederic |
Re: ASCII <-> Ansi Umwandlung
Zitat:
Die Funktionen OemToChar und CharToOem machen nichts weiter, als bestimmte Zeichenwerte ( ![]() |
Re: ASCII <-> Ansi Umwandlung
Zitat:
|
Re: ASCII <-> Ansi Umwandlung
Hallo,
Zitat:
Gruß xaromz |
Re: ASCII <-> Ansi Umwandlung
Und warum sind dann die meisten Ansi-Funktionen in Delphi für MultByteStrings ausgelegt?
|
Re: ASCII <-> Ansi Umwandlung
In der Hilfe sieht es so aus:
Zitat:
|
Re: ASCII <-> Ansi Umwandlung
Hallo,
Zitat:
Gruß xaromz |
Re: ASCII <-> Ansi Umwandlung
Gibt es diese funktionen nicht schon längst in der codelib? ich hab das doch schon mal gesehen hier... Da war auch als CharToOEM und andersrum tituliert.
|
Re: ASCII <-> Ansi Umwandlung
Auf Unicode stelle ich schon selber um.
(die VCL mit nonVCL zu mischen ist irgendwie witzig) Ich meinte das aber in Bezug auf "Weil AnsiString eigentlich ProZeichen1ByteString heißen sollte" von Olli#4 ... es ist eben nicht immer ein Byte pro Zeichen :warn: |
Re: ASCII <-> Ansi Umwandlung
Zitat:
Hat aber nix mit Ansi nach Ascii Wandlung zu tun, Ascii sind halt nur die 95 druckbaren Zeichen mit einen Bytewert unterhalb 127. Andere Zeichen lassen sich damit zwangsläufig nicht nach Ascii wandeln. Ansi hat sich einfach eingebürgert als Bezeichnung für sonstige Codepages, ob nun Singlebyte oder Multibyte. Zitat:
![]() Als Krücke kann man Multibytestrings sicher auch nicht bezeichnen, da diese in Form von UTF-8 eher die Zukunft sind und z.B. China kein Programm mehr ins Land lässt, das nicht mit GB 18030 umgehen kann. |
Re: ASCII <-> Ansi Umwandlung
Hallo,
Zitat:
Aber um 'mal wieder zum Thema zurückzukommen: Ich würde auch gerne wissen, wozu man den Code eigentlich verwendet. Gruß xaromz PS: Multibyte ist übrigens keine Form von UTF-8, sondern andersrum :wink: . |
Re: ASCII <-> Ansi Umwandlung
Zitat:
Zitat:
Vor XP konnte Windows ja eigentlich nur UCS2, nichtmal UTF-16 (also mit Surrogates). Es "macht" sich einfach leichter, wenn man die allermeisten Zeichen eindeutig darstellen kann, weil bei 2-Byte quasi gegeben ist. Zitat:
|
Re: ASCII <-> Ansi Umwandlung
Zitat:
UTF-8 hat aber gegenüber UTF-16 den Vorteil des geringeren Speicherbedarfs, bei reinem Ascii braucht UTF-16 immerhin den doppelten Platz und das für viele Nullen. Wenn das Betriebssystem die Verwaltung übernimmt, doch ein sympathischer Gedanke. Wenn ich mal die Ansi<->OEM Konvertierung brauche und die Wahl habe eine extra Unit einzubinden oder gleich den API-Aufruf zu verwenden, würde ich sicher die API-Funktion nehmen. PS: ProElement1ByteString? Was ist ein Element? |
Re: ASCII <-> Ansi Umwandlung
Zitat:
Was hier getan wird ist einfach, daß man Speicherplatz gegen CPU-Zeit eintauscht. Und wenn du mich fragst, war das schon zu Zeiten von NT4 (was ja auch nativ UCS2 sprach) kein schlechter Tausch. Zitat:
|
Re: ASCII <-> Ansi Umwandlung
Hallo,
Zitat:
@Olli: Der geringere Speicherplatz von UTF-8 ist bei der Datenübertragung/-sicherung durchaus ein Vorteil. Wenn die Daten aber im Rechner bleiben, dann ist der Tausch Speicherplatz gegen CPU-Zeit natürlich vorzuziehen. Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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