Napraw kodowanie niemieckich umlautów w katalogach i nazwach plików (ü = u╠ê itd.)

13

Mam wiele plików zip, w których występują błędy kodowania dla niemieckich umlautów (äüöĘÜÖß). Pojawiają się zarówno w pliku filename.zip, jak również w dołączonych katalogach i plikach takich jak ten:

  • Fünf = Fu╠ênf
  • Räuber = Ra╠êuber
  • Überfall = U╠êberfall

i tak dalej. Zwykle używam Linuksa, ale z powodu tych problemów próbowałem również maszyny wirtualnej z systemem Windows7, ale powoduje to ten sam bałagan kodowania. W Linuksie bawiłem się z convmv i detox, ale bez powodzenia.

Kiedy używam

  • convmv -f iso-8859-1 -t utf8 --replace --notest -r *

Dostaję komunikat „Pomijanie, już UTF-8”.

Masz jakieś przemyślenia na ten temat?

cydr
źródło
Jakiego systemu antyków używasz? Wszystkie obecne dystrybucje Linuksa używają teraz UTF-8.
BatchyX
Czy może to być problem z systemem plików? Być może nie jest zamontowany w UTF?
terdon
Używam Linux Mint 13 (oparty na Ubuntu 12.04 LTS z Kernel 3.2.0-23), więc jest to dalekie od antyków. Jak już pisałem, wypróbowałem również te pliki na maszynie wirtualnej z systemem Windows 7. Ale oczywiście nie wiem, z czego korzystał ten, który utworzył pliki zip.
cydr
1
To kodowanie wydaje się rodzajem kodowania DOS. Zwykle, jeśli widzę problemy z kodowaniem UTF8, niemieckie umlauty wyglądają jak ä = ä lub Ü = Ã-
cydr
@cider try find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest Znajduje pliki z aktualnego katalogu do przodu i uruchamia convmv osobno dla każdego pliku. Nazwa pliku jest zapisywana jako lista nieaktualna.
Manwe

Odpowiedzi:

2

Powodem, dla którego pojawia się ostrzeżenie „już UTF-8” jest to, że te ciągi naprawdę są już w UTF-8. Znak „ü” został zakodowany w stylu OSX jako „u”, po którym następowały dwa bajty „\ xCC” i „\ x88”. Te dwa bajty razem składają się na reprezentację UTF-8 dla \ u0308, łączną diaeresis.

Jeśli spojrzeć na stronie kodowej 437 listą tutaj , zobaczysz znak \ XCC jako „╠” i znaku \ x88 „E”.

Cokolwiek używasz do wyświetlania tych sekwencji znaków, nie interpretuje ich jako UTF-8, a raczej jako CP437.

Szybki dowód, jeśli czytasz ruby, który wyświetla się zgodnie z oczekiwaniami w moim terminalu UTF-8:

$ ruby -e 'puts "u\xCC\x88"' | iconv -f cp437 -t utf-8
ü
$ ruby -e 'puts "u\xCC\x88"'
ü
S2VpdGgA
źródło
0

Domyślam się, że to system plików, który próbujesz zdekompresować lub zmodyfikować pliki. FAT32 nie polubi twoich umlautów. Spróbuj skopiować te pliki z dysku flash (lub tego, co masz), a następnie rozpakuj plik zip, aby zobaczyć, jakie znaki tworzą nazwy plików.

Zarówno NTFS (Windows), jak i Ext4 (mennica) nie powinny mieć problemu z kodowaniem nazw.

Kodowanie nazw samych plików zip w systemie FAT32 najprawdopodobniej nie ulegnie zmianie ani nie zostanie naprawione po skopiowaniu ich do odpowiedniego systemu plików, ale podkatalogi podczas dekompresji powinny być w porządku.

CenterOrbit
źródło
0

Najpierw zauważ, że kodowanie znaków jest własną sekcją piekła. W świecie Windows nadal istnieje paskudny dualizm między UTF-8 a M $ graniem głupim przez długi czas i naleganiem na ISO-8859 (zgadnij, kto to wymyślił). Jak wspomniano powyżej, prawie na pewno ma coś wspólnego z systemem plików. Moje rozwiązanie nie jest techniczne, ale działa dla mnie od wielu lat:

Moja osobista porada dotycząca nazw plików jest zawsze taka sama: po prostu trzymaj się znaków alfanumerycznych oraz myślnika (-) i podkreślenia (_). Napisz umlaute jako ae, ue i oe. Nie używaj spacji i innych znaków specjalnych. Na początku jest to trochę niewygodne, ale pozwoli zaoszczędzić wiele bólu w nieoczekiwanych miejscach.

Na marginesie: tak, to rodzaj paskudnego „hacka”, ale jeśli pracujesz na różnych platformach, często musisz wracać do ostatniego wspólnego mianownika. Uznałbyś za rzecz oczywistą, że coś takiego jak kodowanie znaków byłoby twardym standardem, ale okazuje się, że standardy są trudne do uzyskania. Ten XKCD całkiem ładnie podsumowuje

paradokson
źródło
Mam dość problemów z kodowaniem nazw plików, gdy próbuję (i nie udaje mi się) zsynchronizować pliki między komputerami Mac, Windows i Linux (przez Syncthing). Dostosowałbym twoją radę, jednak w języku tureckim są ç, ş, ı, ğ, ü, ö, nie są wygodne pisać alfanumerycznie. Chcę powstrzymać się od korzystania z pamięci w chmurze, ale ten problem mnie do tego zmusza.
Teo