我有一些带有特殊字符的文件,例如重音字母。
它们是有效的名称,但由于某种原因,当它们通过网络复制到驱动器时(可能以另一种格式),名称看起来仍然相同,但并不相同。
我可以将文件复制回来,现在我有两个文件,它们在完全相同的路径中具有完全相同的名称。
我的猜测是有两个不同的值代表重音字母,因此它们看起来是相同的。有没有办法查看名称本身的十六进制,而不是文件?
这很重要,因为我的一个同步应用程序变得混乱并创建重复项。
答案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后面加上“组合锐音符号”,也显示为é。这样的字符串需要归一化如果要比较它们,但即使标准化也有不同的变体,并且不同的操作系统可以以不同的方式存储相同的字符串。