將 \x 開頭編碼的資料轉成中文輸出

在 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 處理文字,可以使用變數串接

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈將 \x 開頭編碼的資料轉成中文輸出〉中有 1 則留言

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料