Command-Line
如何使用命令行解碼文件名?
是否可以通過命令行解碼文件名?
假設我有以下兩個文件:
- 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 字元的類似內容,它們都是等價的。