数据库是sybase,读取时,中文列出现乱码,解决如下:
sybase_engine = create_engine(f"sybase+pyodbc://dba:sql@sybase_second")
tab = pd.read_sql_query("SELECT * FROM product", sybase_engine)
tab = tab.apply(lambda x: x.astype(str).str.encode('cp850').str.decode('gbk'))
print(tab)
思路如下:
- 先找到数据库中的编码,sybase查看编码的语法:select id,name from syscharsets(我的sybase编码是cp850)
- 把dataframe的每列转换为str
- 把每一列先encode(编码)成cp850,再encode(解码)成gbk,就成功了
- 我测试过了,encode(解码)成utf-8,或者gbk2312都还是乱码,只有解码成gbk能读取出来
- 整个过程的解决的转折点在于,试过把某一个中文乱码,用如下代码,解读出来了
print("▄╦▒®║ýÍ╣┐╚║¤╝┴".encode('cp850').decode('gbk'))
最后,奉劝大家,不要接触sybase数据库,不然真的头发不保!