
アクセント文字などの特殊文字を含むファイルがあります。
有効な名前ですが、何らかの理由でネットワーク経由でドライブにコピーした場合(おそらく別の形式で)、名前はまだ同じように見えますが、同じではありません。
ファイルをコピーし直すことができ、まったく同じパスにまったく同じ名前の2つのファイルがあります。
私の考えでは、アクセント文字を表す2つの異なる値があるので、同じように見えるようです。ファイルではなく名前自体の16進数を表示する方法はありますか?
私の同期アプリケーションの1つが複雑になり、重複エントリが作成されたため、これは重要です。
答え1
ファイル名を、od
または同様のツールにパイプします。
printf '%s\n' * | od -t x1 -a
$ ls
Accentué bar foo
$ printf '%s\n' * | od -t x1 -a
0000000 41 63 63 65 6e 74 75 c3 a9 0a 62 61 72 0a 66 6f
A c c e n t u C ) nl b a r nl f o
0000020 6f 0a
o nl
0000022
同じエンコーディングを使用しても、多くの文字が異なる表現を持つことができます。たとえば、UTF-8 では、0xC3 0xA9 は é を表し、0x65 0xCC 0x81 は e の後に「結合急性」を表し、é とも表されます。これらの文字列には次のものが必要です。正規化比較したいのですが、正規化にもバリエーションが異なり、オペレーティングシステムごとに同じ文字列を異なる方法で保存できます。