Autor Beitrag
Moonbiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 21.04.08 12:35 
Hi!

Hoffe das Thema passt hier rein.
Weiter hoffe ich beim Suchen nicht übersehen zu haben, dass dies hier schon behandelt wurde.


Ich lese eine INI-Datei in eine Stringlist ein. In dieser gibt es Einträge, denen eine CharSet-Definition vorausgeht.
Um die Einträge richtig darzustellen muss ich nun den CharSet der als String vorhanden ist in Cardinal umwandeln.

Also aus 'CharSet=RUSSIAN_CHARSET' mache ich RUSSIAN_CHARSET, was aber ein String ist. Für die Konvertierung mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function AnsiToWide(const Text: AnsiString; Charset: Cardinal): WideString;
//Autor: MSDN LIB??
var
  CharsetInfo: TCharsetInfo;
  L: Integer;
begin
  // Codepage besorgen
  TranslateCharsetInfo(Charset, CharsetInfo, TCI_SRCCHARSET);

  // Puffergröße ermitteln
  L := MultiByteToWideChar(CharsetInfo.ciACP, MB_PRECOMPOSED,
    @Text[1], Length(Text), nil, 0);

  // Puffer anlegen
  SetLength(Result, L);

  // Konvertieren
  MultiByteToWideChar(CharsetInfo.ciACP, MB_PRECOMPOSED,
    @Text[1], Length(Text), @Result[1], L);
end;

brauche ich nun die
ausblenden Delphi-Quelltext
1:
2:
{$EXTERNALSYM RUSSIAN_CHARSET}
  RUSSIAN_CHARSET = 204;
aus der Windows-Klasse.

Gibt es da schon etwas fertiges? Eine Art StringToCharset o.Ä.?

Gruß

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

also ich stell mir sowas in der Art vor, nur eben professioneller, bzw gibts das vl schon:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function StringToCharset(charsetString: WideString): Cardinal;
begin
  if charsetString='ANSI_CHARSET' then Result:=ANSI_CHARSET

  else if charsetString='DEFAULT_CHARSET' then Result:=DEFAULT_CHARSET
  else if charsetString='SYMBOL_CHARSET' then Result:=SYMBOL_CHARSET
  else if charsetString='SHIFTJIS_CHARSET' then Result:=SHIFTJIS_CHARSET
  else if charsetString='HANGEUL_CHARSET' then Result:=HANGEUL_CHARSET
  else if charsetString='GB2312_CHARSET' then Result:=GB2312_CHARSET
  else if charsetString='CHINESEBIG5_CHARSET' then Result:=CHINESEBIG5_CHARSET
  else if charsetString='OEM_CHARSET' then Result:=OEM_CHARSET
  else if charsetString='JOHAB_CHARSET' then Result:=JOHAB_CHARSET
  else if charsetString='HEBREW_CHARSET' then Result:=HEBREW_CHARSET
  else if charsetString='ARABIC_CHARSET' then Result:=ARABIC_CHARSET
  else if charsetString='GREEK_CHARSET' then Result:=GREEK_CHARSET
  else if charsetString='TURKISH_CHARSET' then Result:=TURKISH_CHARSET
  else if charsetString='VIETNAMESE_CHARSET' then Result:=VIETNAMESE_CHARSET
  else if charsetString='THAI_CHARSET' then Result:=THAI_CHARSET
  else if charsetString='EASTEUROPE_CHARSET' then Result:=EASTEUROPE_CHARSET
  else if charsetString='RUSSIAN_CHARSET' then Result:=RUSSIAN_CHARSET
  else if charsetString='MAC_CHARSET' then Result:=MAC_CHARSET
  else if charsetString='BALTIC_CHARSET' then Result:=BALTIC_CHARSET

  else Result:=ANSI_CHARSET;

end;
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mo 21.04.08 19:01 
suchst du evtl. IdentToCharset?

Gruß Frank

_________________
EB FE (die wahrscheinlich kürzeste Endlosschleife der Welt :) )
BA 01 00 00 00 52 EB 09 BB 4D 11 86 7C FF D3 EB 0D E8 F2 FF FF FF 63 68 61 72 6D 61 70 00 C3
Moonbiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 21.04.08 20:26 
Ja, vielen Dank!
(war die Frage recht dämlich? wie finde ich soetwas?)
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mo 21.04.08 20:49 
dämlich nicht, aber wenn du mal in der Delphi-Hilfe geschaut hättest, was es alles so gibt mit "Charset", hättest du CharsetToIdent gefunden, welches die umkehrfunktion ist :) dann nur noch die 2 Bezeichner umdrehen...

Gruß Frank

_________________
EB FE (die wahrscheinlich kürzeste Endlosschleife der Welt :) )
BA 01 00 00 00 52 EB 09 BB 4D 11 86 7C FF D3 EB 0D E8 F2 FF FF FF 63 68 61 72 6D 61 70 00 C3