[問題] 字串轉碼問題

作者: tg70197 (alex)   2019-07-24 11:07:59
各位大大好
小弟在字碼轉換時遇到問題找不到解決方向
想請各位大大指點
有一些資料從資料庫撈出來後是ASCII碼
但顯示是亂碼
小弟需要將它轉換成正常可讀的字碼
煩請各位大大協助
程式如下:
cur.execute(sql)
rows = cur.fetchall()
for row in rows:
print(row[0])
con.close()
顯示為:
https://imgur.com/BoXNvK0
資料庫原是內容為:
https://imgur.com/v754Wvu
有嘗試轉碼
for row in rows:
print(bytes(row[0], encoding='ASCII').decode('UTF8'))
con.close()
但出現
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-29:
ordinal not in range(128)
查了一些資料設定字元為UTF8 我本來就都是UFT8
print(sys.getdefaultencoding())
print(sys.stdin.encoding)
print(sys.stdout.encoding)
print(sys.stderr.encoding)
請問有其他方法嗎?
感謝各位
作者: TitanEric (泰坦)   2019-07-24 22:06:00
推樓上
作者: kenduest (小州)   2019-07-24 11:37:00
要先看DB table 編碼用什麼,並且確認連線時候用哪種編碼,最後才是搞考慮目前操作端要顯示若編碼不同的處理
作者: tg70197 (alex)   2019-07-24 11:41:00
os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.WE8ISO8859已經知道編碼是什麼了,原本DB內就是存ASCII碼所以才需要把ASCII轉成可以顯示的資料
作者: AndCycle (AndCycle)   2019-07-24 16:00:00
你如果要顯示在命令列你就要搞懂console編碼的問題如果你想快速解就先寫在檔案裡然後開筆記本去看
作者: wintersxp (wintersxp)   2019-07-26 17:33:00
樓上給的建議都不錯,但我認為你DB資料根本不是ascii
作者: kenduest (小州)   2019-07-28 22:47:00
大概就是像是以往有人在mysql用latin1字集放big5編碼
作者: alvinlin (林矜業)   2019-07-30 11:15:00
讀出文字檔後存成.html再試著用瀏覽器換不同碼解碼試試?

Links booklink

Contact Us: admin [ a t ] ucptt.com