Debian

以十六進制查看文件名?

  • December 30, 2021

我有一些帶有特殊字元的文件,例如重音字母。

它們是有效的名稱,但由於某種原因,當它們通過網路複製到驅動器時,可能是另一種格式,名稱看起來仍然相同,但並不相同。

我可以將文件複製回來,現在我有兩個文件在完全相同的路徑中似乎具有完全相同的名稱。

我的猜測是有兩個不同的值表示重音字母,因此它們看起來相同。有沒有辦法查看名稱本身的十六進制,而不是文件?

這很重要,因為我的一個同步應用程序變得混亂並創建了重複項。

將文件名通過管道傳輸到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後跟“組合重音”,也顯示為é。這樣的字元串如果要進行比較就需要進行規範化,但即使是規範化也有不同的變體,不同的作業系統可以以不同的方式儲存相同的字元串。

引用自:https://unix.stackexchange.com/questions/684355