nomi file UTF8 e utilità shell

2

Prova i prossimi comandi dal terminale:

touch á.txt
$ ls
á.txt

find .  -name á.txt -print

stampa nulla.

Le mie impostazioni di Terminal.app sono utf8 - vedi qui:

La domanda: come arrivare a lavorare in modo transnazionale (Finder + riga di comando) con nomi di file UNICODE?

Capisco che dietro la scena ci sia la diversa normalizzazione unicode, quindi:

$ echo á.txt | od -bc
0000000   303 241 056 164 170 164 012                                    
           á  **   .   t   x   t  \n 

e quando

$touch á.txt
$ ls *.txt
á.txt

$ ls *.txt | od -bc
0000000   141 314 201 056 164 170 164 012                                
           a   ́     **   .   t   x   t  \n   

ma QUAL È LA SOLUZIONE?

    
posta jm666 03.07.2013 - 11:28
fonte

1 risposta

3

Come hai detto, caratteri come á sono memorizzati o mostrati in forma scomposta (LATIN SMALL LETTER A + COMBINING ACENT ACCENT) anche se la maggior parte dei layout di tastiera inserisce caratteri in forma composta (LATIN SMALL LETTER A WITH ACUTE).

Il formato è una variante di NFD in cui alcuni intervalli di caratteri non vengono decomposti. Vedi Codifiche di testo in VFS :

Important: The terms used in this Q&A, precomposed and decomposed, roughly correspond to Unicode Normal Forms C and D, respectively. However, most volume formats do not follow the exact specification for these normal forms. For example, HFS Plus (Mac OS Extended) uses a variant of Normal Form D in which U+2000 through U+2FFF, U+F900 through U+FAFF, and U+2F800 through U+2FAFF are not decomposed (this avoids problems with round trip conversions from old Mac text encodings).

Puoi convertire il testo nel formato scomposto con iconv -t utf-8-mac :

$ touch á
$ ls | tr -d '\n' | xxd -p
61cc81
$ printf á | xxd -p
c3a1
$ find . -name á
$ find . -name $(iconv -f utf-8 -t utf-8-mac <<< á)
./á
    
risposta data 03.07.2013 - 12:43
fonte

Leggi altre domande sui tag