AGB  ·  Datenschutz  ·  Impressum  







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

ASCII <-> Ansi Umwandlung

Ein Thema von shmia · begonnen am 8. Jun 2006 · letzter Beitrag vom 28. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

ASCII <-> Ansi Umwandlung

  Alt 8. Jun 2006, 17:58
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.
Andreas
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: ASCII <-> Ansi Umwandlung

  Alt 10. Jun 2006, 00:11
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:
MSDN-Library durchsuchenOemToChar: The OemToChar function translates a string from the OEM-defined character set into either an ANSI or a wide-character string.
Tja, was ist nun "OEM-defined"? Jedenfalls ist das Ergebnis nicht auf jedem System uniform!
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: ASCII <-> Ansi Umwandlung

  Alt 27. Jul 2006, 20:11
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

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:
  • Warum ist in beiden Fällen der Ein- und Ausgabetyp "ansistring"
  • Was genau kann man mit dem Code machen? Für welche Fälle wäre er produktiv nutzbar?


Es wäre wirklich prima, wenn jemand das aufklären könnte!
Vielen Dank!
Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: ASCII <-> Ansi Umwandlung

  Alt 27. Jul 2006, 21:40
Zitat von fkerber:
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

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:
  • Warum ist in beiden Fällen der Ein- und Ausgabetyp "ansistring"
  • Was genau kann man mit dem Code machen? Für welche Fälle wäre er produktiv nutzbar?
Tja, das ist genau eine Frage, die sich jeder stellen sollte. Warum ist Ein- und Ausgabe AnsiString. Weil AnsiString eigentlich ProZeichen1ByteString heißen sollte und der WideString ProZeichen2ByteString. Die Namensgebung in Delphi hat keinerlei, aber wirklich keinerlei Auswirkung auf diese Dinge. Bekanntlich kann man bequem einen UTF-8-kodierten String in einer AnsiString-Variablen ablegen, weil es da eben keinen Zusammenhang zwischen dem Namen (AnsiString) und der Funktion (abspeicher von Strings aus Zeichen mit 1 Byte pro Zeichen) gibt. Man nimmt fälschlicherweise anhand des Namens an, daß der String immer ANSI-Zeichen beherbergen muß, dabei ist ANSI ja nur eine Kodierung, die wie viele andere Kodierungen bestimmte Zeichen in einen 8bit-Zeichensatz quetscht.

Die Funktionen OemToChar und CharToOem machen nichts weiter, als bestimmte Zeichenwerte (Delphi-Referenz durchsuchenord) in ANSI-Kodierung auf die OEM-Kodierung abzubilden. So daß der Buchstabe Ü beispielsweise immer als Ü angezeigt wird, auch wenn dies auf der Konsole geschieht, welche meist die OEM-Kodierung benutzt, während der Quelltext eines Delphiprogramms üblicherweise in ANSI-Kodierung abgespeichert wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: ASCII <-> Ansi Umwandlung

  Alt 28. Jul 2006, 12:20
Zitat von Olli:
Weil AnsiString eigentlich ProZeichen1ByteString heißen sollte und der WideString ProZeichen2ByteString.
ich dachte Delphi interpretiert den AnsiString als MultiByteString?[delphi]
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: ASCII <-> Ansi Umwandlung

  Alt 28. Jul 2006, 15:18
Hallo,
Zitat von himitsu:
ich dachte Delphi interpretiert den AnsiString als MultiByteString?
nö, AnsiString ist die 1 Byte-Version (nativ von Delphi), WideString die 2 Byte-Version (OLE-Strings) von Strings. "String" ist standardmäßig ein AnsiString.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: ASCII <-> Ansi Umwandlung

  Alt 28. Jul 2006, 15:24
Und warum sind dann die meisten Ansi-Funktionen in Delphi für MultByteStrings ausgelegt?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: ASCII <-> Ansi Umwandlung

  Alt 28. Jul 2006, 15:27
In der Hilfe sieht es so aus:
Zitat:
AnsiString ~2^31 Zeichen 4 Byte bis 2 GB 8-Bit-Zeichen (ANSI), DBCS ANSI, MBCS ANSI usw.
WideString ~2^30 Zeichen 4 Byte bis 2 GB Unicode-Zeichen, Mehrbenutzer-Server und mehrsprachige Anwendungen
Logischerweise verwendet Delphi unter Sprachversionen von Windows, die nur mit Multibytezeichen funktionieren auch solche für Ansi-Strings. 1 bis 4 Byte pro Zeichen, nicht als kleinste Zugriffsmöglichkeit 1 Byte.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: ASCII <-> Ansi Umwandlung

  Alt 28. Jul 2006, 15:33
Hallo,
Zitat von himitsu:
Und warum sind dann die meisten Ansi-Funktionen in Delphi für MultByteStrings ausgelegt?
Weil Borland sich bisher beharrlich weigert, seine VCL auf Unicode zu portieren. Damit trotzdem Schriften darstellbar sind, die mehr als 256 Zeichen beinhalten, wird die Krücke MultiByteString benutzt. Das ist aber (genauso wir z. B. UTF-8) nur eine Codierung, die der Einfachheit halber in einen AnsiString gepackt wird. Wie Olli schon schrieb, Name und Inhalt müssen nicht immer übereinstimmen.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: ASCII <-> Ansi Umwandlung

  Alt 28. Jul 2006, 16:02
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:35 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