nombres de archivos UTF8 y utilidades de shell

2

Prueba los siguientes comandos desde el terminal:

touch á.txt
$ ls
á.txt

find .  -name á.txt -print

no imprime nada.

La configuración de Mi Terminal.app es utf8 - vea aquí:

La pregunta: ¿Cómo lograr trabajar de forma transparente (línea de comando del Finder +) con los nombres de archivo de UNICODE?

Entiendo que detrás de la escena están las diferentes normalizaciones de Unicode, así que:

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

y cuando

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

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

pero ¿CUÁL ES LA SOLUCIÓN?

    
pregunta jm666 03.07.2013 - 11:28

1 respuesta

3

Como usted mencionó, los caracteres como á se almacenan o se muestran en forma descompuesta (LATIN SMALL LETTER A + COMBINING ACUTE ACENT) aunque la mayoría de las distribuciones de teclado insertan caracteres en forma compuesta (LATIN SMALL LETTER A WITH ACUTE).

El formato es una variante de NFD donde algunos rangos de caracteres no se descomponen. Consulte Codificaciones de texto en VFS :

  

Importante: Los términos utilizados en esta Q & A, precompuestos y descompuestos, corresponden aproximadamente a las Formas C y D de Unicode Normal, respectivamente. Sin embargo, la mayoría de los formatos de volúmenes no siguen la especificación exacta para estas formas normales. Por ejemplo, HFS Plus (Mac OS Extended) utiliza una variante de la Forma D normal en la que U + 2000 a través de U + 2FFF, U + F900 a través de U + FAFF, y U + 2F800 a través de U + 2FAFF no se descomponen (esto evita problemas con conversiones de ida y vuelta de antiguas codificaciones de texto de Mac).

Puedes convertir texto al formato descompuesto 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 <<< á)
./á
    
respondido por el user495470 03.07.2013 - 12:43

Lea otras preguntas en las etiquetas