在 access.log / error.log 或者某些頁面,有時後會看到 \x 開頭,16進制的字串,要怎麼將這些字串還原回原本的文字呢?
將 \x 開頭編碼的資料轉成中文輸出
\x 這些開頭的,就是 16進制的 UTF-8 中文編碼(大多數是 3 bytes),所以若四個中文字,大多會是 4 * 3 = 12個16進位的字串。
以下是 "生日優惠" 的編碼,用幾種程式語言來解碼呈現
- PHP
- <?php echo "\xe7\x94\x9f\xe6\x97\xa5\xe5\x84\xaa\xe6\x83\xa0"; ?>
- <?php printf('%s', "\xe7\x94\x9f\xe6\x97\xa5\xe5\x84\xaa\xe6\x83\xa0"); ?>
- Python 2
- print "\xe7\x94\x9f\xe6\x97\xa5\xe5\x84\xaa\xe6\x83\xa0".decode('utf-8')
- Python 3
- print(b"\xe7\x94\x9f\xe6\x97\xa5\xe5\x84\xaa\xe6\x83\xa0".decode('utf-8'))
- Bash shell
- echo -e "\xe7\x94\x9f\xe6\x97\xa5\xe5\x84\xaa\xe6\x83\xa0"
- var=`cat filename`; echo -e $var; # Shell 若要用 echo -e 處理文字,可以使用變數串接