web-dev-qa-db-ja.com

ディレクトリとファイル名のドイツ語ウムラウトのエンコーディングを修正しました(ü=u╠êなど)

ドイツのウムラウト(äüöÄÜÖß)のエンコードエラーがある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 --replace --notest -r *

「スキップ、すでにUTF-8」が表示されます。

これについて何か考えはありますか?

13
cider

「すでにUTF-8」という警告が表示される理由は、これらの文字列が実際にはすでにUTF-8に含まれているためです。 「ü」文字は、OSXスタイルで「u」の後に2バイトの「\ xCC」と「\ x88」が続くようにエンコードされました。これらの2バイトは、結合された分音記号である\ u0308のUTF-8表現を構成します。

コードページ437のリスト ここ を見ると、\ xCC文字が「╠」、\ x88文字が「ê」であることがわかります。

これらの文字シーケンスを表示するために使用しているものが何であれ、それらはUTF-8としてではなく、CP437として解釈されます。

Rubyを読んだ場合、私のUTF-8端末に期待どおりに表示される簡単な証拠:

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

私の推測では、ファイルを解凍または操作しようとしているファイルシステムです。 FAT32はあなたのumlautsを気に入らないでしょう。これらのファイルをフラッシュドライブ(または何を持っているか)からコピーしてみてください。次に Zipファイルを解凍して、ファイル名が生成する文字の種類を確認してください。

NTFS(Windows)とExt4(Mint)の両方で、名前のエンコードに問題はないはずです。

FAT32システムでのZipファイル自体の名前エンコーディングは、適切なサポートファイルシステムにコピーしたときに変更または修正されない可能性がありますが、解凍したときのサブディレクトリは問題ないはずです。

0
CenterOrbit

最初に、文字エンコードはそれ自体が地獄のセクションであることに注意してください。 Windowsの世界では、UTF-8とM $の間に、長い間愚かで、ISO-8859(誰がそれを思いついたのかを推測する)を主張するという厄介な二元論がまだ存在します。上で述べたように、それはほぼ確実にファイルシステムと関係があります。私の解決策は技術的なものではありませんが、長年私のために働いてきたものです:

ファイル名に関する私の個人的なアドバイスは常に同じです。英数字とダッシュ(-)およびアンダースコア(_)を使用するだけです。ウムラウトをae、ue、oeと書きます。スペースやその他の特殊文字は使用しないでください。最初は少し不便ですが、思いがけない場所での苦痛を大幅に軽減します。

補足として:はい、これは一種の厄介な「ハック」ですが、クロスプラットフォームで作業する場合は、最後の最小公分母にフォールバックする必要があります。文字エンコードのような基本的なものは難しい標準になるのは当然だと思いますが、標準を取得するのは難しいことがわかります。これ [〜#〜] xkcd [〜#〜] それを非常にうまく要約します

0
paradoxon