最近因為專案用python處理strace的結果檔
碰到ascii的output卡了一下,做一個筆記紀錄處理方式
在python3中的字元都是ascii的編碼,\x接兩個16進位的數字就是表示他是ascii
像下面這個例子
跑出來的結果跟string = 'efg'結果是一樣的
也就是說在程式裡面宣告\x65\x66\x67跟efg是一樣的意思
或是說python用ascii存字串,但是印出來的時候會自動轉成我們看得懂的文字
但是因為strace的結果我先把它存到一個文字檔,再去進行處理
結果\x65\x66\x67讀進來之後就真的變成\x65\x66\x67的一個字串了
但是找了半天很像也沒有可以用的函式去處理這個問題,只好自己土炮一個字一個字轉
碰到ascii的output卡了一下,做一個筆記紀錄處理方式
在python3中的字元都是ascii的編碼,\x接兩個16進位的數字就是表示他是ascii
像下面這個例子
string = '\x65\x66\x67'
print(string)
print(string)
跑出來的結果跟string = 'efg'結果是一樣的
也就是說在程式裡面宣告\x65\x66\x67跟efg是一樣的意思
或是說python用ascii存字串,但是印出來的時候會自動轉成我們看得懂的文字
但是因為strace的結果我先把它存到一個文字檔,再去進行處理
結果\x65\x66\x67讀進來之後就真的變成\x65\x66\x67的一個字串了
但是找了半天很像也沒有可以用的函式去處理這個問題,只好自己土炮一個字一個字轉
a = data.split("\\x") #首先先切出16進位的部分存到list中
for i in range(1,len(a),1):
a[i] = chr(int(a[i],16)) #然後一個一個16進位轉成10進位之後再轉成字元
string = ''.join(a) #最後在把它串在一起
string = string.encode('utf-8') #然後使用utf-8做編碼
for i in range(1,len(a),1):
a[i] = chr(int(a[i],16)) #然後一個一個16進位轉成10進位之後再轉成字元
string = ''.join(a) #最後在把它串在一起
string = string.encode('utf-8') #然後使用utf-8做編碼