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

'ls' und utf-8-Dateinamen

Leser: 1


<< >> 6 Einträge, 1 Seite
moritz
 2007-11-03 13:49
#101738 #101738
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

ich habe ein relativ frisch installiertes Debian Etch, und meine xterms laufen alle unter utf-8. Das funktioniert auch wunderbar, bis auf `ls'.

Ich habe einige Musikdateien, die ich von einer alten fat32-Partition kopiert habe, und die in latin1 kodiert waren. Natürlich werden dann bei einem `ls' die Dateinamen falsch angezeigt, anstelle der Umlaute erscheinen schwarze Fragezeichen auf weissem Grund.

Also habe ich mir ein Skript geschrieben, das die Dateinamen nach utf-8 kodiert:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use File::Copy;

for (glob '*'){
        my $utf8_fn = decode('latin1', $_);
        $utf8_fn = encode("utf-8", $utf8_fn) , "\n";
        if ($utf8_fn ne $_){
                print "Moving from $_ to $utf8_fn\n";
                move($_, $utf8_fn);
        }
}


Das funktioniert auch prächtig, in der Ausgabe des prints wird der utf-8 kodierte String korrekt angezeigt, und auch ein 'echo *' auf der shell funktioniert:
Code: (dl )
1
2
$ echo *
Die Schlümpfe.ogg rename.pl


Nur ls weigert sich, den Umlaut korrekt anzuzeigen:
Code: (dl )
1
2
ls
$ Die Schl??mpfe.ogg rename.pl


Was kann ich machen, um ls zum laufen zu bringen? Ist das ein Bug in ls?

Danke schon mal im Voraus
ptk
 2007-11-03 21:33
#101793 #101793
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Hast du auch die Locale auf utf-8 gesetzt?
moritz
 2007-11-03 23:39
#101810 #101810
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Ich habe LANG auf EN_US.UTF-8 stehen - reicht das? Wenn nein, welche der LC_* muss ich setzen?
ptk
 2007-11-04 01:19
#101812 #101812
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du kannst dir mit "locale" anschauen, wie die anderen Locales (implizit) gesetzt sind.

Schau mal nach, ob dein ls die Option -B kennt. Bei BSD kann man damit "... Force printing of non-printable characters ...". Aber eigentlich sollte es nicht notwendig sein.

EN müsste aber normalerweise klein geschrieben sein.
moritz
 2007-11-04 13:39
#101819 #101819
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Ah danke, mit ordentlich gesetzten Locales funktioniert es. Jetzt muss ich nur noch herausfinden, welche den Ausschlag gab, weil ich eigentlich LC_ALL auf C stehen lassen will.
bloonix
 2007-11-04 14:01
#101824 #101824
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Soweit ich weiß, hat LC_ALL eine höhere Priorität als alle anderen
gesetzten Variablen. Wenn LC_ALL also gesetzt ist, werden die
anderen Variablen ignoriert. LANG hat die niedrigste Priorität und
wird nur verwendet, wenn eine andere Variable nicht gesetzt ist.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< >> 6 Einträge, 1 Seite



View all threads created 2007-11-03 13:49.