Command-Line

如何使用命令行解碼文件名?

  • March 17, 2017

是否可以通過命令行解碼文件名?

假設我有以下兩個文件:

  • foo.mp3
  • 酒吧.mp3

是否有任何命令行工具可以將文件名解碼為其 UTF-8 值:

  • 0x66 0x6F 0x6F 0x2E 0x6D 0x70 0x33
  • 0x62 0x61 0x72 0x2E 0x6D 0x70 0x33

將字節值作為十六進制數字獲取的標準(POSIX/Unix)命令是od.

file=foo.mp3
printf %s "$file" | od -An -vtx1

其輸出類似於:

66 6f 6f 2e 6d 70 33

$file上麵包含一個任意數組(非 NUL 用於 shell 以外的zsh字節。不考慮字元編碼。

如果你想包含一個字元$file數組(所以在語言環境的編碼中)並且你想將每個字元的 Unicode 程式碼點作為十六進制數字,在 Little-Endian 系統上,你可以這樣做:

printf %s "$file" | iconv -t UTF-32LE | od -An -vtx4

也可以看看:

printf %s "$file" | recode ..dump

或者:

printf %s "$file" | uconv -x hex/unicode
printf %s "$file" | uconv -x '([:Any:])>&hex/unicode($1)\n'

如果您希望字節值作為這些字元的 UTF-8 編碼的十六進制數字:

printf %s "$file" | iconv -t UTF-8 | od -An -vtx1

對於foo.mp3僅包含 ASCII 字元的類似內容,它們都是等價的。

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