![]() |
Code Page-Name zu Identifier
Hallo,
gibt es eine Funktion, die mir zum Namen einer Code Page den zugehörigen Identifier liefert? Also bei Eingabe von "ISO-8859-1" sollte dann "28591" rauskommen. Siehe ![]() Ich könnte natürlich einfach die Liste in ein Array kloppen, aber solche Listen können sich ja ändern... Gruß xaromz |
Re: Code Page-Name zu Identifier
hach, diese Code Page Identifiers hab'sch gesucht (ohne den genauen Namen sucht man sich im MSDN ja zu tode :wall: ), aber wenn sich das tatsächlich ändern kann, dann wär ich an einer Lösung auch interessiert :angel2:
Wär praktisch, wenn ich "zuverlässig" ISO-8859-1 bis ISO-8859-10 in Unicode umwandeln könnte. nja ISO-8859-1 hab ich derzeit 1:1 übersetzt ... das scheint ja mit dem Unicode bis #255 übereinzustimmen |
Re: Code Page-Name zu Identifier
Zitat:
![]() |
Re: Code Page-Name zu Identifier
Dankö <(^_^<)
2 Minuten <-> 6,5 Monaten ... ich hoff mal der Threadersteller nimmt das nicht persölich :stupid: |
Re: Code Page-Name zu Identifier
Hallo,
Zitat:
Gruß xaromz |
Re: Code Page-Name zu Identifier
kannst sie ja auch gern noch verraten ... ma sehn was mir dann besser gefällt :angel:
|
Re: Code Page-Name zu Identifier
Hallo,
Zitat:
Delphi-Quellcode:
Füll einen Text mit seinem Charset rein und Du bekommst das entsprechende Unicode.
function ConvertText(const Text: AnsiString; Charset: Cardinal): WideString;
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; Gruß xaromz |
Re: Code Page-Name zu Identifier
Zum Ermitteln der Codepage-Namen kannst Du das GetCPInfoEx verwenden. Wenn Du nach dem Namen suchst, kannst Du dies im Callback von EnumSystemCodePages machen.
|
Re: Code Page-Name zu Identifier
gut, ich hab eh nur die Namen wie "ISO-8859-1" als String und müßte dann die nachfolgenden Daten entsprechend konvertieren.
wobei diese CodePages zum Mindestumfang gehören was ich da unterstüzen müßte und wenn ich direkt über die Namen suchen könnte, dann würde ja automatisch noch anderes gleich mit unterstüzt :thumb: also dann versuch ich's mal mit EnumSystemCodePages :) |
Re: Code Page-Name zu Identifier
CPInfoEx ist in Delphi nicht definiert (jedenfalls in D7, 2007 habe ich schon wieder gelöscht). Hier ein Code den ich verwende um z.B. eine Combobox mit den Namen zu füllen. Besonderheit: Das Object-Property der Liste wird als Codepage missbraucht ;)
Delphi-Quellcode:
unit CpFuncs;
interface uses windows, classes; type _cpinfoex = record MaxCharSize: UINT; { max length (bytes) of a char } DefaultChar: array[0..MAX_DEFAULTCHAR - 1] of Byte; { default character } LeadByte: array[0..MAX_LEADBYTES - 1] of Byte; { lead byte ranges } UnicodeDefaultChar : WCHAR; CodePage : UINT; CodePageName : array[0..MAX_PATH] of char; end; TCPInfoEx = _cpinfoex; {$EXTERNALSYM CPINFOEX} CPINFOEX = _cpinfoex; {$EXTERNALSYM GetCPInfoEx} procedure GetCodePageList(AList : TStrings); function GetCPInfoEx(CodePage: UINT; dwFlags : DWORD; var lpCPInfoEx: TCPInfoEx): BOOL; stdcall; function GetCPInfoEx; external kernel32 name 'GetCPInfoExA'; implementation uses Sysutils; var CodePageList : TStringList; function CpEnumProc(CodePage : PChar) : Cardinal ; stdcall; var CpInfoEx : TCPInfoEx; Cp : cardinal; begin Cp := StrToIntDef(CodePage,0); if IsValidCodePage(Cp) then begin GetCPInfoEx(Cp, 0, CpInfoEx); CodePageList.AddObject(Format('%s', [CpInfoEx.CodePageName]), TObject(Cp)); end; Result := 1; end; procedure GetCodePageList(AList : TStrings); begin CodePageList.Clear; AList.Clear; EnumSystemCodePages(@CpEnumProc, CP_SUPPORTED); AList.Assign(CodePageList); end; initialization CodePageList := TStringList.Create; finalization CodePageList.Free; end. |
Re: Code Page-Name zu Identifier
Zitat:
Delphi-Quellcode:
[Edit] hmm ... LongBool-True ($ffffffff) wird wohl nicht so bekocht wie LongWord(1)
Function EnumCodePagesProc(CodePageString: PChar): LongBool; StdCall;
Begin Form1.Memo1.Lines.Add(CodePageString); Result := True; End; Procedure TForm1.FormCreate(Sender: TObject); Begin EnumSystemCodePages(@EnumCodePagesProc, CP_SUPPORTED); End; Bollean-True(1) ist ja leider zu kurz :? und dabei steht doch was von Boolean im PSDK :shock: nur leider sind die CodePage-Namen etwas blöd ... nett lokalisiert, was ein prüfen auf bestimmte Namen ungünstig macht :cry: Zitat:
|
Re: Code Page-Name zu Identifier
Zitat:
|
Re: Code Page-Name zu Identifier
Zitat:
bleibt aber dennoch das Problem mit der Stringerkennung. also ich bekomm z.B. eine Datei und in der ist z.B. "ISO-8859-1" zu finden, jetzt müßte ich das für eine Weitere Verarbeitung in Unicode umwandeln, da mein Programm damit arbeitet. aber der String "ISO-8859-1" ist nirgends in de Liste zu finden :cry: |
Re: Code Page-Name zu Identifier
Also mit dem oben geposteten Code geht es definitiv, ich mache im FormCreate folgendes:
Delphi-Quellcode:
Und das ist das Ergebnis:
GetCodePageList(cbxCpExt.Properties.Items);
![]() |
Re: Code Page-Name zu Identifier
klar geht der Code ... hab ja nicht behauptet er ginge nicht, aber...
wenn dein Programm jetzt einen String ala "ISO-8859-1" bekommt, wie soll es diesen denn jetzt in dieser Liste suchen? OK, ich könnte das erste "-" mal einfach so blind ersetzen, aber wer sagt mir daß dieses in einer anderen Sprache nicht wieder anders geschrieben wird? Oder hab ich das jetzt nur falsch verstanden und bezieht sich dieses "könnte sich (zuküntig) ändern" nicht auf die Identifiers der CodePages und ich könnte diese somit doch hart kodieren? ('nen kleines Array der nötigen CPs ... CP-String_to_CP-Ident) |
Re: Code Page-Name zu Identifier
Zitat:
![]() |
Re: Code Page-Name zu Identifier
Zitat:
|
Re: Code Page-Name zu Identifier
Ok, also geht es wohl um die Umsetzung eines html charset in eine Windows-Codepage. Da es dabei ja wirklich diese kleinen gemeinen Unterschiede in der Schreibweise bei html und Windows gibt muss man im schlimmsten Fall wohl tatsächlich eine feste
![]() ![]() |
Re: Code Page-Name zu Identifier
ok, dann halt doch hart kodiert ._.
nja, hoffentlich bleiben die Identifiers gleich ... klingt ja hier und da so, als könnte sich da mal was dran ändern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 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 by Thomas Breitkreuz