Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11143[/thread]

Zeichen ersetzen: UTF - ISO-8859-2/windows-1250?

Tags: Ähnliche Threads

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Gast Gast
 2008-01-15 18:45
#104752 #104752
Ich bin ein Perl Neuling und Perl ist auch meine erste Programmiersprache. Insbesonde mit charsets kenne ich mich überhaupt nicht aus. Alles was ich im Internet bisher dazu gefunden hab war mir vieeeeeeeel zu hoch und ich suche schon den ganzen Tag! Deshalb wäre ich dankbar wenn mir jemand weiterhelfen kann und mirs idiotensicher erklären könnte.

Ich hab etliche Text-Dateien, die tschechische Schriftzeichen enthalten, diese Dateien sollen in anderen Programmen verwendet werden, die nur ASCII-Code unterstützen. Jetzt hab ich versucht ein Perl script zu schreiben, dass die Zeichen durch mehrere von mir erfundene Zeichen ersetzt (so ähnlich wie im Deutschen ß mit ss geschrieben werden kann).
Das funktioniert auch ganz gut, wenn die Dateien in UTF-8 codiert wurden. Es funktioniert aber nicht mit ner ganzen Reihe anderer Dateien, die ich hier so rumliegen habe. So jetzt meine Fragen:
1.) Gibt es ne Möglichkeit mit Perl herauszufinden, welchen Zeichencode eine Datei verwendet?
2.) Kann man mit perl Dateien in einem bestimmten Zeichencode einlesen und in einen anderen konvertieren?
3.) Wie?
4.) Wenn das alles nicht geht, welche Möglichkeiten gibts noch zeichencode zu konvertieren?

Vielen Dank schon mal
Annett
Linuxer
 2008-01-15 20:13
#104754 #104754
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

auf welchem Betriebssystem soll die Konvertierung vorgenommen werden?
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2008-01-15 20:17
#104755 #104755
windows vista 64 bit
ptk
 2008-01-15 21:25
#104757 #104757
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
1. Nur durch Raten. Es ist günstig, wenn du weißt, welche Zeichen in den Dateien vorkommen, z.B. wenn du dir sicher sein kannst, dass als "Sonderzeichen" nur deutsche Umlaute vorkommen. Das erleichtert das Raten.
2.+3. Siehe Encode.pm. Oder benutz einfach piconv. Das müsste mit deiner Perl-Installation mitinstalliert worden sein.
ptk
 2008-01-15 21:29
#104758 #104758
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
#Kein Kommentar
 2008-01-15 22:27
#104760 #104760
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
es gibt schon perl für vista?
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Gast Gast
 2008-01-16 14:28
#104793 #104793
Danke für die Antworten. Sorry, dass es bei mir so lang gedauert hat, ich musste erst mal checken, was ich alles geschnallt habe ;)

Also, da es sich um tschechische Zeichen handelt, z.B. &#344;, kann es sich nur um Latin2 handeln, d.h. windows 1250 oder Iso-8859-2? Soweit ich das verstanden habe, gibt es nicht mehr?

Deshalb hilft mir das script noch nicht so viel, weil ich es adaptieren müsste und nicht ganz verstehe.

Ich müsste die entsprechenden unicode codes (@expected_codepoints) finden und dann den text ($octets_to_analyze) ändern?

Ab dann muss ich zugeben, versteh ich sowieso nicht mehr was das script macht.

Ich glaube mit piconv könnte ich zurecht kommen, kann man das auch in einem script verwenden?

Ich habe perl64 installiert, das ist glaube ich für vista.

Annett

kristian
 2008-01-16 21:15
#104798 #104798
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Wenn du eine Perl-Version hast die Unicode kann und dein Betriebssystem Unicode kann - für Vista kann ich die Frage nicht beantworten - ist Perl dein Freund.
Mit Hilfe des Moduls Encode kannst du (fast) alles nach UTF-8 konvertieren.

Code (perl): (dl )
1
2
3
4
5
kristian@tux:~> perl -wle '
use Encode;
my @list = Encode->encodings(":all");
print $_ for @list;
'

7bit-jis
AdobeStandardEncoding
AdobeSymbol
AdobeZdingbat
ascii
ascii-ctrl
big5-eten
big5-hkscs
cp1006
cp1026
cp1047
cp1250
cp1251
cp1252
cp1253
cp1254
cp1255
cp1256
cp1257
cp1258
cp37
cp424
cp437
cp500
cp737
cp775
cp850
cp852
cp855
cp856
cp857
cp860
cp861
cp862
cp863
cp864
cp865
cp866
cp869
cp874
cp875
cp932
cp936
cp949
cp950
dingbats
euc-cn
euc-jp
euc-kr
gb12345-raw
gb2312-raw
gsm0338
hp-roman8
hz
iso-2022-jp
iso-2022-jp-1
iso-2022-kr
iso-8859-1
iso-8859-10
iso-8859-11
iso-8859-13
iso-8859-14
iso-8859-15
iso-8859-16
iso-8859-2
iso-8859-3
iso-8859-4
iso-8859-5
iso-8859-6
iso-8859-7
iso-8859-8
iso-8859-9
iso-ir-165
jis0201-raw
jis0208-raw
jis0212-raw
johab
koi8-f
koi8-r
koi8-u
ksc5601-raw
MacArabic
MacCentralEurRoman
MacChineseSimp
MacChineseTrad
MacCroatian
MacCyrillic
MacDingbats
MacFarsi
MacGreek
MacHebrew
MacIcelandic
MacJapanese
MacKorean
MacRoman
MacRomanian
MacRumanian
MacSami
MacSymbol
MacThai
MacTurkish
MacUkrainian
MIME-B
MIME-Header
MIME-Header-ISO_2022_JP
MIME-Q
nextstep
null
posix-bc
shiftjis
symbol
UCS-2BE
UCS-2LE
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
UTF-7
utf-8-strict
utf8
viscii


Die Doku zu Encode hilft übringends ungemein, wenn man verstehen will oder muss, was da abgeht.
Sag uns mal noch ein Wort zu deiner Perlversion, ich vermute die kommt von ActiveState?
"perl -v" sagt es dir.

Latin 2 ist nur ein anderer Name für ISO-8859-2, MS hat immer ein eigenes Plazebo für jeden Zeichensatz, in vielen Fällen waren die Anfangs identisch hatten nur andere Namen.

Gruss
Kristian
ptk
 2008-01-16 21:25
#104800 #104800
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Gast+2008-01-16 13:28:13--
Danke für die Antworten. Sorry, dass es bei mir so lang gedauert hat, ich musste erst mal checken, was ich alles geschnallt habe ;)

Also, da es sich um tschechische Zeichen handelt, z.B. &#344;, kann es sich nur um Latin2 handeln, d.h. windows 1250 oder Iso-8859-2? Soweit ich das verstanden habe, gibt es nicht mehr?
Theoretisch gibt es weitere, irgendwelche alten codepages, evtl. mac-encodings usw. win-1250 und iso-8859-2 sind weitgehend kompatibel. Wenn du nur diese beiden hast und sonst nur noch utf-8, dann kannst du auch CPAN:Encode::Guess verwenden.
Quote
Deshalb hilft mir das script noch nicht so viel, weil ich es adaptieren müsste und nicht ganz verstehe.

Ich müsste die entsprechenden unicode codes (@expected_codepoints) finden
Das wären die Zeichen, die du erwartest. Also a-z, A-Z, und dann noch die tschechischen Zeichen, also 0x011B (e mit caron) und all die anderen.
Quote
und dann den text ($octets_to_analyze) ändern?
Das würde bei dir typisch aus einer Datei kommen, denke ich. Also müsstest du da sowas wie $octets_to_analyze = do { open my $fh, $dateiname or die; binmode $fh; <$fh> }; machen.
Quote
Ab dann muss ich zugeben, versteh ich sowieso nicht mehr was das script macht.

Ich glaube mit piconv könnte ich zurecht kommen, kann man das auch in einem script verwenden?
Klar, aber in einem Perl-Skript würde ich lieber Encode::from_to() verwenden. piconv ist gut für den Gebrauch in der Kommandozeile.
Quote
Ich habe perl64 installiert, das ist glaube ich für vista.

Annett


Gast Gast
 2008-01-17 16:11
#104838 #104838
Perl-Version ist v5.10.0 von Activestate.

Die ISO version und die Win-version sind leider nicht identisch für die tschechischen Schriftzeichen.

Ist denn windows 1250 das gleiche wie cp1250? Weil wenn ich Encode::Guess verwende, wird mir ausgegeben, dass er die Schrift nicht erkennt. Aber in word (die für mich zur Zeit einzige Möglichkeit den Zeichencode zu checken) öffne ich sie immer mit windows mitteleuropäisch. Bei mitteleuropäischISO werden falsche Zeichen angezeigt.

Um auf mein Anfangsproblem zurückzukommen: das wichtige ist ja, dass die spezifisch Tschechischen Zeichen ersetzt erden können. Dafür habe ich zur Zeit einfach alle zu suchenden zeichen und die Zeichen mit denen sie ersetzt werden sollen in eine Datei geschrieben, die auch in Mitteleuropäisch (Windows) gespeichert ist. Damit funktioniert das für einige der Dateien. Aber andere scheinen eine andere Codierung zu verwenden und dann gehts wiiiieder nicht, deshalb wär es gut das vorher zu prüfen und dann die entsprechende symbol-datei zu verwenden.
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-01-15 18:45.