Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Dateinamen mit UTF-8-Zeichen aus Directory lesen (https://www.delphipraxis.net/201257-dateinamen-mit-utf-8-zeichen-aus-directory-lesen.html)

kwhk 6. Jul 2019 20:30

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Hallo samso,
Dein Demo-Projekt funktioniert einwandfrei.
Ich kann die Dateien auch öffnen bzw. mit FileExists überprüfen, auch die mit den lustigen Zeichen im Namen.
Ich muss mein Programm auf String-Einstellungen überprüfen. Es kann ja nur daran liegen.

Mit folgendem Befehl kann man die gefundenen Namen in eine Datei ausgeben

Code:
DirList.Items.SaveToFile('DirUTF8.txt',TEncoding.UTF8);
oder

Code:
DirList.Items.SaveToFile('DirUnicode.txt',TEncoding.Unicode);
Wenn man TEncoding nicht angibt, dann werden die besonderen Zeichen als '?' ausgegeben.

Code:
DirList.Items.SaveToFile('DirAnsi.txt');


Nochmals Danke für Deine Arbeit und ein schönes Wochenende !

kwhk 7. Jul 2019 18:59

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Nun habe ich das Programm umgestellt, vor allem alle ShortString, String[nn], AnsiString usw. auf String umgestellt. Da klappt es mit den UTF8-Zeichen.
Allerdings hat sich bestätigt, dass in gleicher Weise wie bei C# in einer RichEditBox bzw. TRichEdit diese Zeichen durch Quadrate ersetzt werden.
Ich habe die TRichEdit durch eine TListBox ersetzt, in dieser werden die UTF8-Zeichen korrekt dargestellt.
In diese Box werden die Log-Informationen ausgegeben, also auch Pfad- und Dateinamen.
Samso hat in seinem Demo-PGM auch eine TListBox benutzt.

Bernhard Geyer 8. Jul 2019 06:59

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Zitat:

Zitat von kwhk (Beitrag 1436242)
Allerdings hat sich bestätigt, dass in gleicher Weise wie bei C# in einer RichEditBox bzw. TRichEdit diese Zeichen durch Quadrate ersetzt werden.

Quadrate ist eigentlich fast immer ein Font-Problem. Die Listbox wird vermutlich über "Font-Linking" automatisch (von Windows) einen Font nehmen, welche das Zeichen beinhaltet.
Das RTF-Control nicht.

samso 8. Jul 2019 08:19

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Ich habe das ebenfalls getestet. Die TRichEdit-Komponente scheint tatsächlich ein Problem mit den Surrogaten zu haben(trotz gleichen Fonts). Eine andere (kostenpflichtige) TRichEdit-Komponente hat dieses Problem nicht.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1436250)
Quadrate ist eigentlich fast immer ein Font-Problem. Die Listbox wird vermutlich über "Font-Linking" automatisch (von Windows) einen Font nehmen, welche das Zeichen beinhaltet.
Das RTF-Control nicht.

Kann man diese Automatik irgendwie prüfen? Bzw. wie kann ich prüfen, ob ein bestimmter Font ein Zeichen enthält oder nicht?

kwhk 8. Jul 2019 09:54

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Windows liefert als Zubehör das Programm WordPad, damit kann man beinahe so, wie mit Office-Word Textdateien bearbeiten.
Die bestmögliche Speichern-Form ist Speichern als RTF-Datei.
Wenn ich versuche in WordPad so ein Herz-Zeichen einzufügen, da wird das ignoriert.
Ich habe mit einem Hex-Editor den Hex-Code F0 9F 92 9C hinein editiert, da wird von WordPad nur Unsinn angezeigt.
Wenn ich die RTF-Datei mit Office-Word bearbeite, kann ich das Herz-Symbol einfügen. Die Datei vergrößert sich von 219 Bytes auf 1910 Bytes. Office-Word fügt vermutlich Grafiken ein, keine Zeichen.
Fazit: RichText kann / unterstützt das nicht.

p80286 8. Jul 2019 21:43

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Zitat:

Zitat von kwhk (Beitrag 1436271)
Wenn ich die RTF-Datei mit Office-Word bearbeite, kann ich das Herz-Symbol einfügen. Die Datei vergrößert sich von 219 Bytes auf 1910 Bytes. Office-Word fügt vermutlich Grafiken ein, keine Zeichen.

Nö!! Je nach Word-Version werden unterschiedliche Standard-Daten in die RTF-Datei geschrieben. Ein simles Hallo Welt kann dann schon mal auf 4K anwachsen.
Aber mit Notepad (z.B.)kann man sich den Inhalt einer RTF-Datei anschauen. Da sieht man dann wirklich was man hat.

Gruß
K-H

kwhk 9. Jul 2019 10:22

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So sieht es aus, wenn man mit Word ein Herz einfügt (m.E. ist das Grafik)
Code:
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031\deflangfe1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fnil\fcharset1 Segoe UI Symbol;}}
{\*\generator Riched20 10.0.18362}{\*\mmathPr\mnaryLim0\mdispDef1\mwrapIndent1440 }\viewkind4\uc1 
\pard\nowidctlpar\sa200\sl276\slmult1\f0\fs22\lang7 Hase Handy \f1\lang1031\u-10179?\u-9060?{\pict{\*\picprop{\sp{\sn wzDescription}{\sv Image}}{\sp{\sn posv}{\sv 1}}
}\pngblip\picw847\pich847\picwgoal480\pichgoal480 
89504e470d0a1a0a0000000d494844520000002000000020080300000044a48ac6000000017352
474200aece1ce90000000467414d410000b18f0bfc6105000000cc504c5445000000a85aeead47
eba95aee984adcaa5bf0ab5af09143d4aa5cefab5cf0a95bee994adc9245d5aa5befaa5bef9547
d89648d9984bdcab5bf0aa5bef984adcab5bf0994bdda95bee9a4cddaa5af09c4edf9a4adf9b4a
d7a155ec9d4ee1a354e6aa5befaa5bef9546d6aa5befaa5aed9e4fe09649da964adaaa5aefaa5c
ef984cdc974cdbab5cf0a95aef9b4edeaa5bef8d40cfc28fef8f41d1b676efa657eba153e6ac5f
efaf66efa555e99143d3b572ef994adc9547d88f42d2ba7defad62efbf89efbc82efba7eefb26c
ef169165d30000002f74524e53004606feb55120faf9c63bfef4eedddcd3a5977e7e7676696763
483a130dfef6f3e9e6d5cfc5c0bbaf9b8a87857117324e7891000000097048597300000ec30000
0ec301c76fa8640000012f49444154384fbd92d97282401045071114dc8dc66834fbbe4d3380e0
6e92ffffa7f4c02d2388af9ea7e97b6ed1038538191363d8b76c0cc2b6fa43e30b83c6eedec8cd
544ac7d093eb441b29e575fb32918cd1887e3ccfe7d02c0bf131f7beb92c65a8cee1abbe977a29
e3ce60eead93a3940b4a1aa5a6f6738457e63aad320155265cf89cb2ff45966549bc523891b78d
90e4a8519d0b8da99fdca98005292e543115b024e24213530133aa70e105d32121d11d172c8c87
f086772e94ee31e7e107544a5c102e821ce68ce8427b21ce106559103da75e885764fbf0821634
5fa38bf41ff6ede40220bf2556f4040506265442b0a20ec40e6bef9307337a43bc877b0bcd7e85
f7cb623fa43e5ed5777f6396f163a0bd6a8d111c52ae05a1d27fd1517a4af5703cc26884c3c910
e20f81fe5dec20cb86d90000000049454e44ae426082
}\f0\lang7  5\'80 Test\par
}
Und so sieht es aus, wenn man in das WordPad-Dokument mit dem hex-Editor das Herz im UTF8-Code einfügt
Code:
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.18362}\viewkind4\uc1 
\pard\sa200\sl276\slmult1\f0\fs22\lang7 Hase Handy�� 5\'80 Test\par
}
Leider wird hier durch die Foren-Software auch nicht alles korrekt dargestellt.
Im Edit-Fenster sieht es anders aus (siehe Anhang).

Schokohase 9. Jul 2019 11:48

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich meine in diesem RTF-Code dürfen nur ASCII-Zeichen auftauchen. Alles andere, was über HEX 7F liegt muss entsprechend kodiert werden.

Und dann kommt dabei so etwas heraus
Code:
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.18362}\viewkind4\uc1 
\pard\sa200\sl276\slmult1\f0\fs22\lang7 Hello World!\u10084?\par
}
und sieht dann so aus:
Anhang 51379
Verwendet habe ich im Übrigen dieses Zeichen

Und hier aus der Wikipedia
Zitat:

A standard RTF file can consist of only 7-bit ASCII characters, but can encode characters beyond ASCII by escape sequences.

kwhk 9. Jul 2019 13:14

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Das ist toll, wird auch von WordPad angezeigt.
Wie bekommst Du aber so ein Zeichen in das Dokument, muss man immer über Notepad gehen ?

Schokohase 9. Jul 2019 13:25

AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
 
Zitat:

Zitat von kwhk (Beitrag 1436367)
Wie bekommst Du aber so ein Zeichen in das Dokument, muss man immer über Notepad gehen ?

Nö, kannst du auch mit Delphi machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 Uhr.
Seite 2 von 3     12 3      

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