Schrift
[thread]8075[/thread]

Datei kein UTF8

Leser: 3


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Froschpopo
 2006-06-11 08:41
#67223 #67223
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich hab mir hier ne datei gezogen:

http://src.soohrt.org/plz.txt

dieses File ist leider kein UTF-8, sondern einfach nur westeuropäische ISO.
Unter Linux habe ich nun probleme die Datei zu verarbeiten, da er anstelle von äüöß einfach ein Leerzeichen macht oder irgendson Fleck anzeigt.

wie kann ich jetzt die Datei ins UTF-8 umwandeln?
Froschpopo
 2006-06-11 09:19
#67224 #67224
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Hat sich erledigt ! habs per Copy&Paste in eine Textdatei gezogen und die dann als utf8 gespeichert.
FIFO
 2006-06-11 15:04
#67225 #67225
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Alternative wäre:
Code: (dl )
open (my $handle, ':encoding(ascii)', $filename);


geht ab Perl 5.8, für 'ascii' ggf. andere Codierung einsetzen, z.B. 'iso-8859-1', 'cp437' usw.

intern arbeitet Perl sowieso mit utf8
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"
sid burn
 2006-06-11 18:59
#67226 #67226
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Mit dem Thema habe ich mich auch noch letztens beschäftigt. Du musst wie bereits gesagt das Encoding der Datei beim öffnen übergeben.

Code: (dl )
open FILE, "<:encoding(iso-8859-1)", "plz.txt"  or  die $!;


Allerdings musst du STDOUT noch sagen das du UTF8 ausgeben möchtest, sonst siehst du immer noch irgendwelche Sonderzeichen bei der Ausgabe.

Das geht dann folgendermaßen.
Code: (dl )
binmode( STDOUT, "utf8" );


Wenn du die Datei in UTF-8 Schreiben möchtest, dann musst du dies ebenfalls beim öffnen des handles übergeben.

Code: (dl )
open FILE, ">:utf8", "plz.utf"  or  die $!


Damit lassen sich sehr leicht Converter von einem zum anderen Format schreiben.



Was ich eigentlich ganz toll finden würde, wäre wenn perl das Encoding selber erkennen würde, also beim Öffnen, und bei der Ausgabe der Daten auf der Shell. Vielleicht weiß da einer ob das auch geht?\n\n

<!--EDIT|sid burn|1150040137-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
esskar
 2006-06-11 19:34
#67227 #67227
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=sid burn,11.06.2006, 16:59]Was ich eigentlich ganz toll finden würde, wäre wenn perl dsa Encoding selber erkennen würde, also beim Öffnen, und bei der Ausgabe der Daten auf der Shell. Vielleicht weiß da einer ob das auch geht?[/quote]
so einfach ist das nicht.
sid burn
 2006-06-11 19:43
#67228 #67228
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=esskar,11.June.2006, 17:34][quote=sid burn,11.06.2006, 16:59]Was ich eigentlich ganz toll finden würde, wäre wenn perl dsa Encoding selber erkennen würde, also beim Öffnen, und bei der Ausgabe der Daten auf der Shell. Vielleicht weiß da einer ob das auch geht?[/quote]
so einfach ist das nicht.[/quote]
Naja ein
Code: (dl )
1
2
sidburn@sid:~$ file plz.txt
plz.txt: ISO-8859 text, with CRLF line terminators

schafft es ja auch das Encoding heraus zu bekommen. Okay vllt. nur zu 99% wahrscheinlichkeit da es ja nicht die ganze Datei durchgeht.

Bei der Ausgabe von STDOUT habe ich ein Workaround gefunden.
Code: (dl )
use open OUT => ':locale';

Es wird dann für STDOUT das Encoding genommen was in der Locale Umgebungsvariable steht. Das sollte eigentlich stimmen, wenn nicht hat man sein System falsch konfiguriert.


Leider wird das ganze nicht für die Ausgabe in einer Datei übernommen, wäre noch toll wenn man im Vorraus für jedes Dateihandle festlegen könnte welches Encoding benutzt wird. Oder noch besser auch für die Ausgabe in einer Datei das Encoding aus der Locale Umgebungsvariable nutzen könnte.\n\n

<!--EDIT|sid burn|1150040663-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
renee
 2006-06-11 21:55
#67229 #67229
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
das file command ist aber nicht überall vorhanden...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sid burn
 2006-06-12 00:43
#67230 #67230
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=renee,11.June.2006, 19:55]das file command ist aber nicht überall vorhanden...[/quote]
Damit wollte ich ja auch nur sagen dass es schon Möglich ist das Encoding einer Datei heraus zu bekommen.

Ich bin allerdings kein Perl Guru, und bin immer noch dabei die Sprache zu Lernen. Ich kenne auch noch nichtmal alle module der Standarddistribution. Und vielleicht gibt es ja ein Modul, ein befehl oder sonst irgendeine Möglichkeit das Encoding einer Datei zu ermitteln.

Das es ja Möglich ist zeigt ja das Kommando "file". Soetwas könnte man ja dann auch in Perl integrieren. Bzw. vielleicht hat es ja auch schon einer getan.



Die Möglichkeiten von "file" finde ich jedenfalls generell ganz Hilfreich. Es liest den Header einer Datei ein, und versucht anhand des headers zu erkennen um welchen Dateityp es sich handelt. Sowas ist doch Sinvoller als die Dateiendung als Indiz zu nehmen um welche Datei es sich handelt.

Jedenfalls Funktionieren einige Programme so. z.b Nautilus oder gthumb die eine Vorschau von Bilder/pdf/Videos etc. erstellen, und das unabhängig von der verwendeten Dateiendung. Die überprüfen ja auch um welchen Dateityp es sich handelt und zeigen es trotzdem an. Selbst wenn ich kein Dateiende vergebe. Solch eine Funktion die mir den Dateityp einer Datei zurück gibt würde ich mir in perl auch Wünschen, lassen sich doch paar schöne Sachen mit bauen.\n\n

<!--EDIT|sid burn|1150059020-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Froschpopo
 2006-06-12 02:08
#67231 #67231
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
HA danke für die guten Tipps!! geht also doch irgendwie, ich wusste es :)
Danke!
ptk
 2006-06-12 10:21
#67232 #67232
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=esskar,11.06.2006, 17:34][quote=sid burn,11.06.2006, 16:59]Was ich eigentlich ganz toll finden würde, wäre wenn perl dsa Encoding selber erkennen würde, also beim Öffnen, und bei der Ausgabe der Daten auf der Shell. Vielleicht weiß da einer ob das auch geht?[/quote]
so einfach ist das nicht.[/quote]
Es ist nicht einfach, es ist praktisch unmöglich. Es sei denn, man kann Annahmen über den Inhalt des Textes machen (z.B. Sprache des Inhalts).
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2006-06-11 08:41.