iT邦幫忙

1

python轉碼問題

想請問一下各位大大,小弟目前碰到一個問題是python地轉碼問題
下圖為從csv檔抓出來的資訊
https://ithelp.ithome.com.tw/upload/images/20200512/2012574407RtlbOGCK.jpg

小弟想要做的就是把上述編碼轉成中文,就像以下的圖,右下角的部分
https://ithelp.ithome.com.tw/upload/images/20200512/20125744urzoHjMfxO.jpg

然而當我想抓出X表裡面的值的時候,都會變成字串的模式
像是X[0] 會抓出 "b'\xe7\x86\x9f\xe8\xb7\xaf'" 是字串的byte 是沒辦法轉成中文的
目前的想法是 把b replace掉 這沒什麼問題,但雙斜線怎麼樣都轉不掉 replace("\\","\")也是沒有效果的
https://ithelp.ithome.com.tw/upload/images/20200512/20125744vwfKNAWKfz.jpg
想請問各位大大要怎麼解決這個問題呢?
又或者是有別的轉碼方法?
感謝大大

DanSnow iT邦新手 1 級 ‧ 2020-05-12 14:38:12 檢舉
一開始讀 csv 時就把編碼順便處理好會比較容易吧

2 個回答

1
froce
iT邦大師 1 級 ‧ 2020-05-12 15:18:50

python3

s = r"b'\xe7\x86\x9f\xe8\xb7\xaf'"
s1 = "".join(s[2:-1].split(r"\x"))
s2 = bytes.fromhex(s1)

print(s2.decode(encoding="utf-8"))
#解出來為「熟路」

他那個檔案輸出的時候就有問題了...
怎麼會把bytes輸出成str

python2

from builtins import bytes
s = r"b'\xe7\x86\x9f\xe8\xb7\xaf'"
s1 = "".join(s[2:-1].split(r"\x"))
s2 = bytes.fromhex(s1)

print s2.decode("utf-8")
0
pinglam
iT邦新手 5 級 ‧ 2020-05-12 16:03:15

如果你是用py3的話,下面可以幫到你,py2就等高手吧.......
x = "b'\xe7\x86\x9f\xe8\xb7\xaf'"
x = x[2:-1]
print (x.encode('latin1').decode('utf8'))

x_s = "b'\\xe7\\x86\\x9f\\xe8\\xb7\\xaf'"
x_s = x_s[2:-1].encode('latin1').decode('unicode_escape')
print (x_s.encode('latin1').decode('utf8'))

result :
熟路
熟路

froce iT邦大師 1 級 ‧ 2020-05-12 20:31:37 檢舉

我上面的寫法改一下就能在python2用了,不用啥高手啦。

我要發表回答

立即登入回答