Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi UTF8 in Stringlist -> Suchen und ersetzen -> UTF8 speichern (https://www.delphipraxis.net/133784-utf8-stringlist-suchen-und-ersetzen-utf8-speichern.html)

Grolle 8. Mai 2009 15:22


UTF8 in Stringlist -> Suchen und ersetzen -> UTF8 spei
 
Hallo,

zur Verfügung stehen mir Delphi 2007 und die TNTUnicode Controls. Wie gehe ich da am Besten vor?

Viele Grüße ...

himitsu 8. Mai 2009 15:33

Re: UTF8 in Stringlist -> Suchen und ersetzen -> UTF8
 
besitzt die TTNTStringList (oder wie die da heißen mag) keine Property für die Kodierung?


OK, bei 'ner "normalen" StringList (vor D2009) hätt ich einfach mal den 1. String um das BOM erweitert
und ansonsten einfach alles UTF-8-kodiert in die Stringliste geladen ... wenn es unbedingt eine StringListe sein muß :nerd:

Grolle 8. Mai 2009 15:53

Re: UTF8 in Stringlist -> Suchen und ersetzen -> UTF8
 
Zitat:

Zitat von himitsu
besitzt die TTNTStringList (oder wie die da heißen mag) keine Property für die Kodierung?

habe ich bis jetzt noch nicht gefunden :?

himitsu 8. Mai 2009 16:02

Re: UTF8 in Stringlist -> Suchen und ersetzen -> UTF8
 
eigentlich dachte ich die hätten da etwas drin :gruebel:


Quick&Dirty:
Delphi-Quellcode:
var x: File;

AssignFile(x, FileName);
Reset(x);
SetLength(S, FileSize(x));
BlockRead(x, S[1], FileSize(x));
CloseFile(x);
Delete(S, 1, 3);
TNTStringList.Text := UTF8Decode(S);

...

AssignFile(x, 'FileName');
Rewrite(x);
Write(x, #$EF#$BB#$BF);
Write(x, UTF8Encode(TNTStringList.Text));
CloseFile(x);

Grolle 8. Mai 2009 16:51

Re: UTF8 in Stringlist -> Suchen und ersetzen -> UTF8
 
Hi,

danke für dein Beispiel! Muss ich da überhaupt noch ne TNTStringList nutzen? (habe gerade mal alles einfach in eine normale Stringliste geladen - klappt auch (ohne jegliche dekodierung)). Es geht übrigens um WordXml-Dateien.

Viele Grüße ...

himitsu 8. Mai 2009 17:03

Re: UTF8 in Stringlist -> Suchen und ersetzen -> UTF8
 
Klar kannst'e UTF-8 auch direkt in 'ne normale StringList laden.
allerdings wäre da oftmals am Anfang das BOM, wobei dieses bei XML nichtmal nötig wäre und oftmals auch nicht vorhanden ist, da dort die Kodierung ja anders angegeben wird.

Ansonsten sind bei UTF-8 alle Zeichen innerhalb des Ansi-Zeichensatzes, weßhalb die "normale" StringList erstmal keine Probleme hat.
(nur Zeichen außerhalb des ASCII-Zeichensatzes werden ja UTF8-kodiert)


Die TNTStringList ist nur nötig wenn du es zum Bearbeiten dekodierst und auch noch kodierte Unicodezeichen enthalten sind.

Grolle 8. Mai 2009 17:15

Re: UTF8 in Stringlist -> Suchen und ersetzen -> UTF8
 
Hi,
Zitat:

Zitat von himitsu
... allerdings wäre da oftmals am Anfang das BOM, ...

:gruebel:
Wie bekomme ich denn raus, ob es da ist und was kann ich dann mit der Information anfangen?
Ich denke mein Weg geht erstmal über eine normal Stringlist, da vorerst nur Zeichen aus dem
ASCII Zeichensatz vorkommen!

Viele Grüße ...

himitsu 8. Mai 2009 17:26

Re: UTF8 in Stringlist -> Suchen und ersetzen -> UTF8
 
BOM = Byte Order Mark
ist eine Identifikationseichenfolge am Anfang einer Textdatei

und ich weiß jetzt nicht, ob M$ dieses in die XML reinbaut, da bei XML UTF-8 die Standardkodierung ist und es nicht angegeben werden muß

für UTF-8 ist das BOM
#$EF#$BB#$BF bzw. #239#187#191 für die ersten 3 Zeichen/Byte der Textdatei

und nach der UFT-8 Dekodierung wäre somit das 1. Zeichen im Unicode ein #$FEFF

falls du praktisch nach einem UTF8Decode ein zusätzliches "komisches" Zeichen am Anfang (vorm ersten < ) stehen hast, dann war ein BOM enthalten. (vorm Decodieren also 3 "komische" Zeichen)

Delphi-Quellcode:
SL.LoadFormFile(...);
SL.Text := UTF8Decode(SL.Text);
...
SL.Text := UTF8Encode(SL.Text);
SL.SaveToFile(...);
[info]
Achtung: ab D2009 geht sowas hier nicht mehr, da dort das Unicode der Strings und Komponenten in die Quere kommt und die UTF8-Kodierung schrotten täte, wenn es über einen UnicodeString umgeleitet würde!

Grolle 8. Mai 2009 17:45

Re: UTF8 in Stringlist -> Suchen und ersetzen -> UTF8
 
Hi,

Zitat:

Zitat von himitsu
... falls du praktisch nach einem UTF8Decode ein zusätzliches "komisches" Zeichen am Anfang ...

Scheint nicht der Fall zu sein. Danke für deine Hilfe! :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 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