AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Lettische OEM-Zeichen auf russischem Drucker
Thema durchsuchen
Ansicht
Themen-Optionen

Lettische OEM-Zeichen auf russischem Drucker

Ein Thema von uligerhardt · begonnen am 22. Okt 2007 · letzter Beitrag vom 23. Okt 2007
Antwort Antwort
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#1

Lettische OEM-Zeichen auf russischem Drucker

  Alt 22. Okt 2007, 17:30
Also, erstmal vorneweg: Ich würde auch lieber Unicode verwenden und auf irgendwelche OEM-Codierungen verzichten, aber das betroffene Programm lebt seit TurboPascal-Zeiten und ist halt gewachsen.

Nun wollen unsere Kunden in Lettland (die russische Betriebssysteme benutzen) einige Strings, die aus OEM-codierten Dateien kommen, auf Lettisch gedruckt haben. Ich löse das jetzt testhalber so (in der Kurzfassung):
Delphi-Quellcode:
MultiByteToWideChar(775, ...); // 775 = OEM-Codepage baltisch
WideCharToMultiByte(1257, ...); // 1257 = Windows-Codepage baltisch
Printer.Charset := 186 // baltisches Charset
Writeln(Lst, ...);
Das funktioniert auch. Bevor ich das jetzt fest in die Anwendung einbaue und entsprechende Konfigurationsmöglichkeiten schaffe, wollte ich aber mal fragen, ob das irgendwie eleganter geht. Z.B., ob das Betriebssystem irgendeinen Zusammenhang zwischen den drei Konstanten 775/1257/186 kennt, ob ich die beiden ersten Schritte zu einem Analogon von OemToChar mit einem Extra-Parameter zusammenfassen kann (ohne Umweg über einen temporären WideString), etc.pp.

Vielen Dank im Voraus für die zahlreichen Kommentare!
Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
261 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Lettische OEM-Zeichen auf russischem Drucker

  Alt 23. Okt 2007, 00:50
Eine MultiByteToMultiByte Funktion wäre mir unbekannt und würde sicher selbst in einem OS nicht anders als über den Unicode"umweg" realisiert werden, mit diesem tempären WideString (die Funktion selbst bräuchte letztlich nur wenige Zeilen - welche du schnell schreiben kannst).
Es wäre ziemlicher Aufwand für jede mögliche Copdepage<->Codepage Konvertierung die notwendigen Tabellen herumzuschleppen, es genügen nur die, mit der diese jeweils auf eine allgemeingültige (dafür wird eben Unicode verwendet) eineindeutig abgebildet werden.
Langer Rede kurzer Sinn, ich denke, du hast schon die beste Methode gefunden.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Lettische OEM-Zeichen auf russischem Drucker

  Alt 23. Okt 2007, 08:13
Zitat von Ydobon:
Langer Rede kurzer Sinn, ich denke, du hast schon die beste Methode gefunden.
Danke, das beruhigt mich schon mal.

Zitat von Ydobon:
Eine MultiByteToMultiByte Funktion wäre mir unbekannt und würde sicher selbst in einem OS nicht anders als über den Unicode"umweg" realisiert werden, mit diesem tempären WideString (die Funktion selbst bräuchte letztlich nur wenige Zeilen - welche du schnell schreiben kannst).
So eine Routine hab ich jetzt schon. Dazu noch eine technische Frage: Ich hab das jetzt mit jeweils zwei Aufrufen von MultiByteToWideChar und WideCharToMultiByte gelöst: Einmal, um die nötige Pufferlänge zu bestimmen, und dann nochmal, um die eigentliche Konvertierung zu erledigen. Geht das einfacher? Bei meinen ersten Versuchen hatten alle Puffer die gleiche Länge (jeweils in Chars bzw. WideChars gemessen) und das hat funktioniert, aber dem Frieden hab ich nicht getraut.
Uli Gerhardt
  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 22:16 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