![]() |
Charset detector: Wie verwenden?
Hallo und schönen Tag!
Auf sourceforge gibt es ein Projekt ![]() Zitat:
Delphi-Quellcode:
Leider bekomme ich als Ergebnis nur "Unknown" und -1. Was mache ich falsch?
program CharsetDetectorTest;
{$APPTYPE CONSOLE} {$R *.res} uses CodeSiteLogging, chsd_dll_intf, System.Classes, System.SysUtils; var LFileStream: TFileStream; LBuffer: TBytes; cs: rCharsetInfo; begin try csd_Reset; LFileStream := TFileStream.Create('C:\mytext.txt', fmOpenRead); try // Read file into buffer: SetLength(LBuffer, LFileStream.Size); LFileStream.ReadBuffer(Pointer(LBuffer)^, Length(LBuffer)); CodeSite.Send('Length(LBuffer)', Length(LBuffer)); if csd_HandleData(PWideChar(LBuffer), Length(LBuffer)) = NS_OK then begin CodeSite.Send('chsd_Done', csd_Done); cs := csd_GetDetectedCharset; CodeSite.Send('cs.Name', PAnsiChar(cs.Name)); // -> Unknown CodeSite.Send('cs.CodePage', cs.CodePage); // -1 CodeSite.Send('cs.Language', PAnsiChar(cs.Language)); // -> Unknown end else CodeSite.Send('csd_HandleData Failed'); finally LFileStream.Free; end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
AW: Charset detector: Wie verwenden?
Alleine beim Wort "Charset" sollte einem klar werden, dass es sich hier um ANSI und nicht um Unicode handeln sollte.
Somit ist WideChar falsch. Fazit: Wide in Ansi ändern PChar in PAnsiChar (der Verfasser sollte erschlagen werden, vorallem da seit 4 Jahren das Delphi mit Unicode arbeitete) [OT] Wenn ich im Code was von BOM lese, dann würde man dafür keine DLL brauchen und wenn das Ding nicht mit Wörterbüchern arbeitet, dann ist es einfach "unmöglich" eine Codieren ala CharSet zu erkennen, vorallem nicht bei all den SingleByteCodepages. Aber bei "Language" könnte es sein, dass er schon irgendwie ein kleines Wörterbuch drin hat, womit er die Sprache versucht zu erkennen. [edit] Das Dateidatum sagt, das Zeug ist 17 Jahre als und stamt aus einer Zeit vor Unicode (nach Delphizeitrechnung). Aber dennoch war PChar schon immer als "dynamisch" definiert. Aber wer beachtet das schon. |
AW: Charset detector: Wie verwenden?
Mhmm, es scheint zu funktionieren, wenn die Textdatei einen BOM hat. Das wäre aber witzlos.
Dann habe ich einen englischen Text abgespeichert (UTF-8 OHNE BOM): Damit habe ich wieder das UnKnown-Ergebnis erhalten. Dann habe ich die deutschen Umlaute äüöß in den englischen Text eingefügt und wieder abgespeichert (wieder UTF-8 OHNE BOM). Dann wird zurückgegeben: Zitat:
Wie kann ich in jedem Fall ein definiertes Ergebnis erhalten? Oder vielleicht ist in meinem Code ein Fehler enthalten? |
AW: Charset detector: Wie verwenden?
Zitat:
|
AW: Charset detector: Wie verwenden?
Mit Notepad++ kann man sehr schön die Codierung eines Textes wechseln. Textdateien mit BOM scheint er recht zuverlässig zu erkennen. Aber dafür brauche ich keine eigene DLL.
Jetzt habe ich einen Text abgespeichert als ISO 8859-2. Das hat er erkannt als: cs.Name = UTF-16LE cs.CodePage = 1200 cs.Language = Unicode |
AW: Charset detector: Wie verwenden?
Die DLL ist egal, an der ändert sich ja nichts. Die ist so, wie sie kompiliert wurde.
Aber die Schnittstelle zur DLL ist fehlerhaft. Ab Delphi 2009 wird durch die falschen Deklarationen teilweise Unicode verwendet. |
AW: Charset detector: Wie verwenden?
Hmm..
Zitat:
Auf der Seite ![]() oben auf 'Code', dann unten 'Browse CVS Repository' und Du kannst Dir den Code anschauen und Herunter laden.. |
AW: Charset detector: Wie verwenden?
Zitat:
![]() Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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