AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dateinamen mit UTF-8-Zeichen aus Directory lesen

Ein Thema von kwhk · begonnen am 5. Jul 2019 · letzter Beitrag vom 9. Jul 2019
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#11

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

  Alt 6. Jul 2019, 21:30
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 !
Hartmut

Geändert von kwhk ( 6. Jul 2019 um 22:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#12

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

  Alt 7. Jul 2019, 19:59
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.
Hartmut
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#13

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

  Alt 8. Jul 2019, 07:59
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#14

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

  Alt 8. Jul 2019, 09:19
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.

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?

Geändert von samso ( 8. Jul 2019 um 09:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#15

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

  Alt 8. Jul 2019, 10:54
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.
Hartmut
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#16

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

  Alt 8. Jul 2019, 22:43
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#17

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

  Alt 9. Jul 2019, 11:22
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).
Miniaturansicht angehängter Grafiken
rtfcode.jpg  
Hartmut

Geändert von kwhk ( 9. Jul 2019 um 11:31 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#18

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

  Alt 9. Jul 2019, 12:48
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:
2019-07-09-12_47_07-dokument.rtf-wordpad.png
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.

Geändert von Schokohase ( 9. Jul 2019 um 12:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#19

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

  Alt 9. Jul 2019, 14:14
Das ist toll, wird auch von WordPad angezeigt.
Wie bekommst Du aber so ein Zeichen in das Dokument, muss man immer über Notepad gehen ?
Hartmut
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#20

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

  Alt 9. Jul 2019, 14:25
Wie bekommst Du aber so ein Zeichen in das Dokument, muss man immer über Notepad gehen ?
Nö, kannst du auch mit Delphi machen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.
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