Se corrigió la codificación de diéresis alemanas en directorios y nombres de archivos (ü = u╠ê, etc.)

13

Tengo muchos archivos zip donde hay errores de codificación para las diéresis alemanas (äüöÄÜÖß). Aparecen tanto en el archivo filename.zip como en los directorios y archivos incluidos de esta manera:

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

y así. Por lo general, uso Linux, pero debido a estos problemas también probé una máquina virtual Windows7, pero resulta en el mismo error de codificación. En Linux jugué con convmv y desintoxicación, pero sin éxito.

Cuando uso

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

Me sale "Skipping, ya UTF-8".

¿Alguna idea sobre esto?

sidra
fuente
¿Qué sistema antiguo estás usando? Todas las distribuciones actuales de Linux usan UTF-8 ahora.
BatchyX
¿Podría ser esto un problema del sistema de archivos? ¿Quizás no está montado en UTF?
terdon el
Uso Linux Mint 13 (basado en Ubuntu 12.04 LTS con Kernel 3.2.0-23), así que esto está lejos de ser antiguo. Y como ya escribí, también probé esos archivos en una VM con Windows 7. Pero, por supuesto, no sé cuál fue el que creó los archivos zip.
Sidra
1
Esta codificación parece algún tipo de codificación de DOS. Por lo general, si veo problemas con la codificación UTF8, las diéresis alemanas se ven como ä = ¤ o Ü = Ãœ
sidra el
@cider try find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest Esto busca archivos desde el directorio actual hacia adelante y ejecuta convmv por separado en cada archivo. El nombre del archivo está codificado como una lista nula.
Manwe

Respuestas:

2

La razón por la que recibe la advertencia "ya UTF-8" es que esas cadenas realmente ya están en UTF-8. El carácter "ü" fue codificado al estilo OSX como una 'u' seguido de los dos bytes "\ xCC" y "\ x88". Estos dos bytes juntos forman la representación UTF-8 de \ u0308, la diéresis combinada.

Si observa el listado de la página de códigos 437 aquí , verá el carácter \ xCC como "╠" y el carácter \ x88 como "ê".

Lo que sea que esté usando para mostrar esas secuencias de caracteres no las interpreta como UTF-8 sino como CP437.

Una prueba rápida, si lee Ruby, que se muestra como se esperaba en mi terminal UTF-8:

$ ruby -e 'puts "u\xCC\x88"' | iconv -f cp437 -t utf-8
ü
$ ruby -e 'puts "u\xCC\x88"'
ü
S2VpdGgA
fuente
0

Mi conjetura es el sistema de archivos que está intentando descomprimir o manipular los archivos. A FAT32 no le van a gustar tus diéresis. Intente copiar estos archivos de la unidad flash (o lo que tenga) y luego descomprima el archivo zip para ver qué tipo de caracteres producen los nombres de archivo.

Tanto NTFS (Windows) como Ext4 (Mint) no deberían tener problemas con la codificación del nombre.

Lo más probable es que la codificación de nombre de los archivos zip en el sistema FAT32 no cambie o se arregle cuando los copie en un sistema de archivos de soporte adecuado, pero los subdirectorios cuando se descompriman deberían estar bien.

CenterOrbit
fuente
0

Primero tenga en cuenta que la codificación de caracteres es su propia sección del infierno. En el mundo de Windows todavía existe un desagradable dualismo entre UTF-8 y M $ jugando estúpido durante mucho tiempo e insistiendo en ISO-8859 (adivina quién se le ocurrió). Como se mencionó anteriormente, es casi seguro que tiene algo que ver con el sistema de archivos. Mi solución no es técnica, sino que me ha funcionado durante muchos años:

Mi consejo personal para los nombres de archivos es siempre el mismo: solo quédate con alfanuméricos más guión (-) y guión bajo (_). Escriba umlaute como ae, ue y oe. No uses espacios y otros caracteres especiales. Al principio es un poco incómodo, pero te ahorrará mucho dolor en lugares inesperados.

Como nota al margen: sí, esto es una especie de "truco" desagradable, pero si trabajas multiplataforma, a menudo tienes que recurrir al último denominador común. Darías por sentado que algo básico, como la codificación de caracteres, sería un estándar difícil, pero resulta que los estándares son difíciles de conseguir. Este XKCD lo resume muy bien

paradoja
fuente
Estoy cansado de problemas de codificación en los nombres de archivos cuando intento (y no puedo) sincronizar archivos entre Mac, Windows y Linux (a través de Syncthing). Adaptaría su consejo, sin embargo, en turco hay ç, ş, ı, ğ, ü, ö, no es conveniente escribir con alfanuméricos. Quiero abstenerme de usar el almacenamiento en la nube, pero este problema me obliga a hacerlo.
Teo