Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Prism CharToOem / OemtoChar unter .NET (https://www.delphipraxis.net/91031-chartooem-oemtochar-unter-net.html)

Lothar 27. Apr 2007 19:26


CharToOem / OemtoChar unter .NET
 
Hallo!

Wie sehen die Aufrufe von CharToOem/OemtoChar unter .NET aus? Das einfache CharToOem(PChar(s),PChar(s)) klappt nicht mehr.

Lothar

Jürgen Thomas 28. Apr 2007 10:06

Re: CharToOem / OemtoChar unter .NET
 
Hallo,

NET arbeitet grundsätzlich mit Unicode. Spezielle Zeichensätze werden über die Encoding-Klasse verarbeitet (z.B. die Convert-Methode). Schau auch einmal in den System.Text-Namespace, ob eine spezielle Klasse (z.B. ASCIIEncoding) Dir schneller hilft.

Gruß Jürgen

Lothar 28. Apr 2007 17:29

Re: CharToOem / OemtoChar unter .NET
 
Danke für den Tip, aber leider habe ich mich hier ergebnislos festgebissen.
ASCII ist bei .NET nur 7-Bit, d.h. alle typischen Zeichen 0..9, a...z etc. sind identisch.
Interessant ist erst das erweiterte ASCII (8-Bit, IBM Code, bis 255) mit den ganzen deutschen Umlauten ü, ä, .. ß ...
(Wenn man mit der Maus auf den gestrichelten Text fährt, bekommt man's hier ja auch schon angezeigt...)
Da ist es wohl einfacher, ich setze die benötigten Zeichen 'manuell' um (mit Case of ..).
Ich verstehe aber nicht, wieso es da nichts Automatisches gibt. (CharToOem war nur 1 Befehl!)

Lothar

ZiMD 28. Apr 2007 18:22

Re: CharToOem / OemtoChar unter .NET
 
Encoding.Default

Flocke 29. Apr 2007 20:57

Re: CharToOem / OemtoChar unter .NET
 
Für IBM OEM:
Code:
System.Text.Encoding.GetEncoding(858)
Siehe hier.

Lothar 5. Mai 2007 16:11

Re: CharToOem / OemtoChar unter .NET
 
Ich möchte noch die von mir gefundenen vollständigen Lösungen nachtragen:

Delphi-Quellcode:
function sfromA (s:string): string; { Ansi -> Oem }
var i: integer;
      asciibuffer, ansibuffer: array of byte;
begin
   SetLength(ansibuffer,LENGTH(s));
   SetLength(asciibuffer,LENGTH(s));
   for i:=1 to LENGTH(s) do ansibuffer[i-1]:=ORD(s[i]);
   asciibuffer:=System.Text.Encoding.Convert(Encoding.Default,Encoding.GetEncoding(850),ansibuffer);
   result:=String(asciibuffer);
end;

function sfromO (s:string): string; { Oem -> Ansi }
var i: integer;
      ss: ansistring;
      buffer: array of byte;
      Encoding: System.Text.Encoding;
begin
   ss:=s;
   SetLength(buffer,LENGTH(s));
   for i:=1 to LENGTH(s) do buffer[i-1]:=ORD(ss[i]);
   Encoding:=System.Text.Encoding.GetEncoding(850);
   result:=Encoding.Getstring(buffer,0,LENGTH(s));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 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