perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




11.02.2012 / 20:08

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragTextdateien: UNICODE-to-ANSI konvertieren
Seitenanfang
He,

auf meinem Windows-Computer gibt es ein fremdes Programm das immer Textdateien (Protokolldateien) erzeugt, diese sind als UNICODE, also 16-Bit txt-Dateien gespeichert.

Mit Perl will ich diese Dateien öffnen (open), gewisse dinge ersetzen und ranhängen und in eine Textdatei wieder ausgeben (z.B. mit nem Perl-skript redundante oder für mich nicht wichtige infos entfernen, die protokolldatei komprimieren oder so, ganz simpele Dinge jedenfalls).

Die Ausgabedatei kodiert Perl immer standardmäßig mit ANSI. Das ist gut so. Das soll so sein. Jetzt das Problem:

Ich öffne normal mit "open TXT, $file", versuche ich dann dadrin Text zu erkennen (s///, patternmatching und solche sachen) funktioniert fast nichts. Es erfolgt keine Modifikation des Textes. Danach gibt das Skript alles per "print TXT2" in eine neue Textdatei aus, und was sehe ich wenn ich diese mit dem Editor öffne? sonderzeichen am anfang, und überall Leerzeichen.
Eindeutig also begründet durch die Umwandlung von UNICODE in den Perlinterpretor und vom Perlinterpretor wieder in ANSI.

Das erklärt warum der Text im Skript nicht erkannt wird, nichts erstezt wird usw., weil die Sonderzeichen stören.

-->Frage: wie öffne ich eine UNICODE-16Bit-Datei, sodass Perl reinen ANSI-Text bearbeiten und speichern kann?
Ich stelle mir Metasprachlich etwa folgendes vor, um das Problem nochmal zu verdeutlichen:


open TXT, $file;
while ($zeile = <TXT>) {
Konvertiere_U16-to-ANSI-Text($zeile)
$zeile =~ s/abc/xyz/;
open TXT2, ">$file2";
print TXT2 $zeile;
}

Ich las etwas von Modul "Encode" oder der Standardfunktion "pack()", weis aber überhaupt nicht ob das Lösungen des Problems sind, weis jmd weiter?

Gruß
Martin

Datum: 02.01.2006-05:00

Beitragre: Textdateien: UNICODE-to-ANSI konvertieren
Seitenanfang
Hi,

hab's selbst noch nicht verwendet, aber schau mal beim Modul 'Unicode::Normalize', dort solltest Du fündig werden...

Gruß Ralf

Datum: 02.01.2006-09:36

Beitragre: Textdateien: UNICODE-to-ANSI konvertieren
Seitenanfang
Danke,

ich befürchte aber ich brauche da noch etwas Hilfe, ich bin nicht klug genug um zu verstehen was es mit den ganzen C, D, KC und so Formaten auf sich hat... :(

Datum: 02.01.2006-23:12

Beitragre: Textdateien: UNICODE-to-ANSI konvertieren
Seitenanfang
Versuch es einmal so:

use Encode; # ist standardmäßig bei PERL dabei
Encode::perlio_ok("utf16") or die ("can't read utf16");

open(my $in, "<:raw", $file) or die("cant open file '$file': $!");
while ($text = decode("utf16", <$in>)) {
...
}
close $in;

Datum: 18.01.2006-07:49

-






-
-