7

私は非常に大きな問題を抱えており、Web でヘルプを見つけることができません。

Web サイトから OSX から Linux (両方のシステムが de_DE.UTF-8 で実行されています) にページを移動したところ、まったく未知の問題が発生しました。一部のファイルはもう見つかりませんでしたが、明らかにハードドライブに (目に見えて) 存在していました。同じ名前。これらのファイルにはすべて、ドイツ語のウムラウトが含まれていました。

サンプル画像を 1 つ取得し、元の request-uri を Web ページからコピーして直接呼び出しましたが、同じエラーが発生しました。ファイル名を書き直した後、それは機能しました。そして、はい、私はそれをタイプミスしませんでした!

これは私を驚かせ、次のエントリを見つけた apache-log を調べました。

192.168.56.10 - - [27/Aug/2012:20:03:21 +0200] "GET /images/Sch%C3%B6ne-Lau-150x150.jpg HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1"
192.168.56.10 - - [27/Aug/2012:20:03:57 +0200] "GET /images/Scho%CC%88ne-Lau-150x150.jpg HTTP/1.1" 404 4205 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1"

それは私が調査するものでした...これが私がUTF8チャートで見つけたものですhttp://www.utf8-chartable.de/

ö   c3 b6   LATIN SMALL LETTER O WITH DIAERESIS
¨   cc 88   COMBINING DIAERESIS

デッドキーについてはすでに聞いたことがあると思います: http://en.wikipedia.org/wiki/Dead_keyそうでない場合は、記事を読んでください。なかなか面白いです(;_;)

それは、OSX がすべての分音符号を文字とは別に保存するということですか? それは本当に、組み合わせの結果である実際の文字を使用する代わりに、OSX が文字 ö を o および ¨ として保存することを意味しますか?

はいの場合、これらのファイルの名前を変更するために使用できる優れたスクリプトを知っていますか? これは、私が OSX から Linux に移行する最初のページではありません ...

4

3 に答える 3

13
于 2012-08-27T18:51:47.577 に答える
2

ここで多くの背景情報を提供してくれた Jon Hanna に感謝します。これは、完全な答えを得るために重要でした。ある正規化形式から他の正規化形式に変換する方法です。

私の変更は、データベースにリンクされているファイル システム (ファイルのアップロードのため) にあるため、データベース ダンプを更新する必要があります。ファイルは移動中にすでに名前が変更されています(おそらくFTPクライアントによって...)

Linux で文字セットを変換するコマンド ライン ツールは次のとおりです。

  • iconv - ストリーム (おそらくファイル) のコンテンツの変換
  • convmv - ディレクトリ内のファイル名を変換する

文字セット utf-8-mac ( http://loopkid.net/articles/2011/03/19/groking-hfs-character-encodingで説明されているように) は、iconv で使用でき、OSX システムにのみ存在するようで、そのため、SQL ダンプを Mac に移動し、変換して元に戻す必要があります。もう 1 つのオプションは、convmv を使用してファイルの名前を NFD に戻すことですが、これは将来的に役立つというよりも妨げになると思います。

ツール convmv には、NFC または NFD と互換性のあるファイル名を適用する組み込み (OS に依存しない) オプションがあります: http://www.j3e.de/linux/convmv/man/

PHP 自体 (私のシステム - Wordpress のベースとなっている言語) は、ここで互換性レイヤーをサポートしています : この問題を修正した後、いくつかのテストを作成し、Wordpress やその他の作業システムのバグレポートを作成する予定です ;)

于 2012-08-27T22:16:49.030 に答える
1

Linux ディストリビューションはファイル名をバイナリ文字列として扱います。つまり、エンコーディングは想定されていませんが、グラフィカル シェル (Gnome、KDE ​​など) は環境変数、ロケールなどに基づいていくつかの想定を行う場合があります。

一方、OS-Xは、Unicode正規化を使用して独自のバージョンのUTF-8を必要または強制します(どれを忘れますか)。すべての分音符号を結合文字に展開します。

Linux では、人々がファイル名に Unicode を使用する場合、分音符号に関しては事前に構成された文字を含む UTF-8 を好む傾向があります。

于 2012-08-27T18:54:28.307 に答える