AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal FreePascal Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)
Thema durchsuchen
Ansicht
Themen-Optionen

Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)

Ein Thema von mjustin · begonnen am 16. Jan 2023 · letzter Beitrag vom 28. Jan 2023
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#1

Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)

  Alt 16. Jan 2023, 19:51
Wie konvertiere ich in Free Pascal (3.x) unter Linux einen Text, der in einem bekannten DOS- oder Windows Encoding vorliegt, unter Angabe einer Single- oder Multibyte Codepage (z.B. Windows-1252, DOS 437/850, 949 (Koreanisch) ...))? Unter Windows funktioniert es mittels MultiByteToWideChar. Die Strings könnten eine dieser Codepages verwenden. Welche es ist, ist zum Konvertierungszeitpunkt bekannt. (z.B. CP 1258, Vietnamesisch, oder CP 932, Japanisch SJIS)

Delphi-Quellcode:
  // code page ids
  CP_THAI = 874; // ANSI/OEM Thai (ISO 8859-11); Thai (Windows)
  CP_SJIS = 932; // ANSI/OEM Japanese; Japanese (Shift-JIS)
  CP_GB2312 = 936; // ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312)
  CP_KOREAN = 949; // ANSI/OEM Korean (Unified Hangul Code)
  CP_BIG5 = 950; // ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5)
  CP_EASTEUROPE = 1250; // ANSI Central European; Central European (Windows)
  CP_RUSSIAN = 1251; // ANSI Cyrillic; Cyrillic (Windows)
  CP_ANSI = 1252; // ANSI Latin 1; Western European (Windows)
  CP_GREEK = 1253; // ANSI Greek; Greek (Windows)
  CP_TURKISH = 1254; // ANSI Turkish; Turkish (Windows)
  CP_HEBREW = 1255; // ANSI Hebrew; Hebrew (Windows)
  CP_ARABIC = 1256; // ANSI Arabic; Arabic (Windows)
  CP_BALTIC = 1257; // ANSI Baltic; Baltic (Windows)
  CP_VIETNAMESE = 1258; // ANSI/OEM Vietnamese; Vietnamese (Windows)
  CP_MACROMAN = 10000; // MAC Roman; Western European (Mac)
In der Dokumentation unter https://www.freepascal.org/docs-html...x32-390003.2.4 ist dieses Beispiel enthalten:

Delphi-Quellcode:
{$h+}  
uses sysutils;

Type
  TString1 = Type*String(1252);
  TString2 = Type*String(1251);

Var
  A : TString1;
  B : TString2;

begin
  A:='123'+'345'+intToStr(123);
  B:=A;
  Writeln('B: "',B,'" : ',StringRefCount(B),' -> ',StringCodePage(B));
  Writeln('A: "',A,'" : ',StringRefCount(A),' -> ',StringCodePage(A));
end.

Für Unices heisst es dazu: "Remark Code page support requires quite some helper routines, these are implemented in the unicodestring manager. On windows, the system routines are used for this. On Unices, the cwstring unit can be used to link to the C library and use the C library conversion support. Alternatively, the fpwidestring unit contains a unicodestring manager implemented natively in Object Pascal."

Ist dieser Lösungsansatz der Einzige (für Unices) oder gibt es Alternativen, die einfacher zu implementieren sind, und keine Deklaration der String-Typen für alle benötigten Codepages notwendig ist?


https://en.wikipedia.org/wiki/Windows_code_page
Michael Justin
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#2

AW: Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)

  Alt 16. Jan 2023, 20:42
In mORMot gibt es die Cross-Platform Unit mormot.core.os. Vielleicht findest du hier weitere Hilfe.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)

  Alt 16. Jan 2023, 21:01
Mit dem widestringmanager sollte es problemlos zum gewünschten Resultat führen.
Delphi-Quellcode:
function StrToCodePage(const AString: UnicodeString; ACodePage: TSystemCodePage): AnsiString;
begin
  Result := '';
  widestringmanager.Unicode2AnsiMoveProc(Pointer(AString), RawByteString(Result), ACodePage, Length(AString));
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)

  Alt 16. Jan 2023, 21:48
TEncoding?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)

  Alt 17. Jan 2023, 13:02
Herzlichen Dank für die Antworten, ich werde den dann entstandenen Beispielcode hier später diese Woche posten. (Meine Linux-Umgebung mit Lazarus 2.2.4 wurde erst spät abends fertig)

Viele Grüße
Michael Justin
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#6

AW: Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)

  Alt 17. Jan 2023, 16:19
Meine Linux-Umgebung mit Lazarus 2.2.4 wurde erst spät abends fertig
Einfach ausführen lässt es sich mit FPCUpDeluxe. Lazarus mit Cross-Compilern unter Windows installieren und die ersten Schritte zur Erstellung eines Projekts, wird ausführlich in diesem YouTube Video erklärt.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Text von DOS/Windows Codepage nach Unicode konvertieren (auch unter Linux)

  Alt 28. Jan 2023, 10:47
Gelöst (für Free Pascal):

Delphi-Quellcode:
function TUnicodeConverter.IntCharToUnicode(ASource: RawByteString): string;
var
  Tmp: UnicodeString;
begin
  Widestringmanager.Ansi2UnicodeMoveProc(PChar(ASource), FCodePage, Tmp, Length(ASource));
  Result := Tmp;
end;
Läuft für alle getesteten Zeichensätze, auch Multibyte (Koreanisch, Japanisch, Chinesisch GB2312 und Big5).

Danke für die Anregungen!

Nun die kleine Zusatzfrage: wie kann ich das unter Linux mit FireMonkey abbilden? Ich vermute, da muss mit TEncoding gearbeitet werden.
Michael Justin
habarisoft.com
  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 05:00 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