修复目录和文件名中德国变音符号的编码(ü=u╠ê等)


13

我有许多zip文件,其中有德国变音符号(äüöÄÜÖß)的编码错误。它们显示在filename.zip以及包含的目录和文件中,如下所示:

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

等等。通常,我使用Linux,但是由于这个问题,我也尝试了Windows7 VM,但它导致相同的编码混乱。在Linux上,我玩过convmv和detox,但没有成功。

当我使用

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

我收到“正在跳过,已经是UTF-8”。

有什么想法吗?


您正在使用什么古董系统?当前所有当前的Linux发行版都使用UTF-8。
BatchyX 2013年

这可能是文件系统问题吗?也许它不是安装在UTF中?
2013年

我使用Linux Mint 13(基于带有内核3.2.0-23的Ubuntu 12.04 LTS),所以这不是古董。正如我已经写过的,我也在Windows 7 VM上尝试了这些文件。但是,我当然不知道创建zip文件的人使用了什么。
苹果酒

1
这种编码似乎是某种DOS编码。通常,如果我看到UTF8编码问题,则德国变音符号看起来像ä=Ã或Ü=Ö
苹果酒

@cider try find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest 这将从当前目录中查找文件,并在每个文件上分别运行convmv。文件名被编码为以null结尾的列表。
Manwe

Answers:


2

之所以收到“已经存在UTF-8”警告,是因为这些字符串确实已经存在于UTF-8中。“ü”字符被编码为OSX风格的“ u”,后跟两个字节“ \ xCC”和“ \ x88”。这两个字节一起构成了\ u0308的UTF-8表示形式,即组合音调。

如果查看此处列出的代码页437 ,您将看到\ xCC字符为“╠”,而\ x88字符为“ê”。

无论用来显示这些字符序列的是什么,都不是将它们解释为UTF-8,而是解释为CP437。

一个快速的证明(如果您阅读红宝石)将在我的UTF-8终端中按预期显示:

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

0

我的猜测是您正在尝试解压缩或处理文件的文件系统。FAT32不会喜欢您的变音符号。尝试从闪存驱动器(或您拥有的驱动器)中复制这些文件,然后解压缩zip文件,以查看文件名产生什么样的字符。

NTFS(Windows)和Ext4(Mint)的名称编码都应该没有问题。

将FAT文件系统上的zip文件本身的名称编码很可能不会更改或在将其复制到适当的支持文件系统时被固定,但是在解压缩后的子目录应该没问题。


0

首先要注意,字符编码是它自己的地狱部分。在Windows世界中,在UTF-8和M $玩了很长时间并坚持使用ISO-8859(猜测是谁提出的)之间,仍然存在一种讨厌的二元论。如上所述,它几乎可以肯定与文件系统有关。我的解决方案不是技术解决方案,而是已经为我服务多年的解决方案:

我个人对文件名的建议始终是相同的:只需使用字母数字加破折号(-)和下划线(_)。将umlaute写为ae,ue和oe。不要使用空格和其他特殊字符。起初有点不方便,但是它将为您在意想不到的地方减轻很多痛苦。

附带说明:是的,这有点令人讨厌,但如果您跨平台工作,则通常不得不退回到最后一个共同点。您会理所当然地认为,诸如字符编码之类的基本知识将是一个硬标准,但事实证明,这是很难获得的。这个XKCD很好地总结了它


当我尝试(失败)在Mac,Windows和Linux之间(通过Syncthing)同步文件时,我已经厌倦了文件名中的编码问题。我会适应您的建议,但是土耳其语中有ç,ş,ı,ğ,ü,ö,不方便使用字母数字编写。我想避免使用云存储,但是这个问题迫使我这样做。
Teo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.