Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Unicode umwandeln Delphi 6 (https://www.delphipraxis.net/157485-unicode-umwandeln-delphi-6-a.html)

v2afrank 13. Jan 2011 10:34

Unicode umwandeln Delphi 6
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich brauche ein bischen Nachhilfe in Unicode. Und zwar ist folgendes gegeben.
Ich habe ein Delphi 6 Programm, welches aus einer Exceltabelle die anzuzeigenden Texte extrahiert. Das passiert in einer Dll, die per ADO auf die Zellen in dem Excelblatt zugreift.
Nun ist auch russisch als Sprache hinzugekommen. Ich habe ein wenig rumgespielt und bin zu folgender Lösung gekommen.

Delphi-Quellcode:
function DecodeString(const str: String; Offset: Integer): Shortstring;
var
  n: Integer;
begin
  result := '';

  for n := 1 to length(str) do
  begin
    if ord(str[n]) > $FF then
      result := (result + chr((ord(str[n]) and $FF) + Offset))
    else
      result := (result + chr((ord(str[n]))));
  end;
end;
Ich rufe die Funktion dann direkt mit dem augelesenen String aus und einem Offset von $B0 für russisch. Jetzt habe ich folgende Fälle festgestellt:
Mit Delphi 6 kompiliert läuft die Funktion auf einem russischen Rechner richtig. Es werden die richtigen kyrillischen Buchstaben angezeigt
Mit Delphi 6 kompiliert läuft die Funktion auf einem deutschen Rechner nicht. Ich erhalte nur ???
Mit Delphi 2010 kompiliert läuft die Funktion auf einem russischen Rechner nicht. Es erscheinen zufällige Zeichen (keine kyrillischen)
Mit Delphi 2010 kompiliert läuft die Funktion auf einem deutschen Rechner richtig

Zu dem Betrieb auf dem deutschen Rechner muss ich noch kurz was sagen. Mir ist klar, dass ich hier auf einem deutschen Windows keine kyrillischen Buchstaben anzeigen kann, jedoch werden die Texte auch zu einer Hardware übertragen, die diesen Text dann auch auf einem russischen Display anzeigt. Dieses Display braucht dabei 1 Byte Strings.
Ich habe mal den korrekten Text angehängt
Öffnet man diese Textdatei auf einem russischen System wird der Text kyrillisch angezeigt und auch zu unserer Hardware gesendet wird der Text richtig angezeigt

Nach so vile Text jetzt meine Frage, warum funktioniert es je nach Compiler auf dem einem bzw. dem anderen System und wie kann ich das Programm abändern, dass es sowohl auf einem deutschen als auch auf einem russischen Rechner den Text wie in richtig.txt erzeugt ?

Bernhard Geyer 13. Jan 2011 10:49

AW: Unicode umwandeln Delphi 6
 
Zitat:

Zitat von v2afrank (Beitrag 1074431)
Mir ist klar, dass ich hier auf einem deutschen Windows keine kyrillischen Buchstaben anzeigen kann,

Dann hast duein komisches Windows. Unsere Delphi6 Programme können auf deutschen Windows (sogar unter Win98) kyrilisch, chinesisch, Arabisch anzeigen - Alles gleichzeigt :-)

Aber spaß beiseite:

In der Unit JclUnicode der Jedi gibt es die Funktion

Delphi-Quellcode:
function WideStringToStringEx(const WS: WideString; CodePage: Word): string;
Dürfte genau sein was du benötigtst. 1251 ist die Codepage für Kyrilisch.

v2afrank 13. Jan 2011 11:06

AW: Unicode umwandeln Delphi 6
 
Super funktioniert.
Danke


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