Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "ANSI" zu "Unicode", zu "Big Endian... konver (https://www.delphipraxis.net/46158-ansi-zu-unicode-zu-big-endian-konver.html)

Delphi Star 19. Mai 2005 16:19


"ANSI" zu "Unicode", zu "Big Endian
 
Wie kann man "ANSI" zu "Unicode", zu "Big Endian Unicode" und zu "UTF-8" konvertieren :?:

Bernhard Geyer 19. Mai 2005 16:25

Re: "ANSI" zu "Unicode", zu "Big En
 
Delphi-Quellcode:
MyUnicodeString := MyAnsiString;  // Compiler-Magic
Big Endian Unicode: Nur relevant wenn Datei gespeicher wird -> ElPack oder TntWare-Komponentensammlung
Delphi-Quellcode:
MyUtf8String := Utf8Encode(MyUnicodeString);

barf00s 20. Mai 2005 08:37

Re: "ANSI" zu "Unicode", zu "Big En
 
Delphi-Quellcode:
var
  wBuf: PWideChar; // unicode
  aBuf: PAnsiChar; // Ansi :)
  sText: string;

begin
  GetMem(wBuf, MAX_PATH);
  GetMem(aBuf, MAX_PATH);
  MultiByteToWideChar(CP_UTF8, 0, aBuf, MAX_PATH, wBuf, MAX_PATH); // ansi -> utf8
  //...
  sText := WideCharToString(wBuf); // utf8 -> string
  //...
  WideCharToMultiByte(CP_UTF8, 0, wBuf, MAX_PATH, aBuf, MAX_PATH, nil, nil); // utf8 -> ansi
  FreeMem(wBuf, MAX_PATH);
  FreeMem(aBuf, MAX_PATH);
end;

Robert Marquardt 20. Mai 2005 09:07

Re: "ANSI" zu "Unicode", zu "Big En
 
Erstens ist AllocMem besser, da es den alloziierten Speicher initialisiert und zweitens rechnen die Funktionen in Bytes, also ist GetMem(wBuf, MAX_PATH*SizeOf(WideChar)); richtig.

Letztlich kann man sich das alles sparen. Man weise einen string einem WideString zu bzw umgekehrt und Delphi wird es schon richten.

Fuer Big Endian muss ein BOM vorhanden sein. Sprich das erste Zeichen des Strings sagt den Endian an. $FFFE bzw $FEFF.
Utf8Encode duerfte das erledigen.

barf00s 20. Mai 2005 10:22

Re: "ANSI" zu "Unicode", zu "Big En
 
funktionieren tuts auch so, aber du hast natürlich recht.
ich benütz dennoch GetMem lieber als AllocMem, da procedures 800% schneller als functions sind.

vt670 20. Mai 2005 10:28

Re: "ANSI" zu "Unicode", zu "Big En
 
Zitat:

Zitat von Robert Marquardt
Erstens ist AllocMem besser, da es den alloziierten Speicher initialisiert und zweitens rechnen die Funktionen in Bytes, also ist GetMem(wBuf, MAX_PATH*SizeOf(WideChar)); richtig.

Letztlich kann man sich das alles sparen. Man weise einen string einem WideString zu bzw umgekehrt und Delphi wird es schon richten.

Fuer Big Endian muss ein BOM vorhanden sein. Sprich das erste Zeichen des Strings sagt den Endian an. $FFFE bzw $FEFF.
Utf8Encode duerfte das erledigen.

Dies trifft leider nur bei Delphi Versionen > 2.01 zu.

Robert Marquardt 20. Mai 2005 11:19

Re: "ANSI" zu "Unicode", zu "Big En
 
Wer mit so alten Delphiversionen arbeitet ist selber schuld, besondrs wenn er Unicodeverarbeitung machen will.

vt670 20. Mai 2005 17:54

Re: "ANSI" zu "Unicode", zu "Big En
 
Zitat:

Zitat von Robert Marquardt
Wer mit so alten Delphiversionen arbeitet ist selber schuld, besondrs wenn er Unicodeverarbeitung machen will.

wer jeden update mitmacht und ewigkeiten damit verbringt die neuen bugs zu finden ebenfalls.

Soll ja auch leute geben die die ältere projekte betreuen

Bernhard Geyer 20. Mai 2005 19:01

Re: "ANSI" zu "Unicode", zu "Big En
 
Zitat:

Zitat von vt670
wer jeden update mitmacht und ewigkeiten damit verbringt die neuen bugs zu finden ebenfalls.

Stimmt, bin selbst noch bei D6

Zitat:

Zitat von vt670
Soll ja auch leute geben die die ältere projekte betreuen

Betreuen ja - aber nicht sowas wie Unicode-Support einbauen.
Man sollte mindestens D3 besitzen um vernünftig mit Unicode arbeiten zu können. ElPack gab es in der 3.2er-Version noch für D3


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz