我正在使用Python的MySQLdb
库来访问带有葡萄牙语条目的数据库,带有一堆重音符,然后使用xlsxwriter
将其保存到Excel文件中。当我关闭工作簿以保存它时,我收到以下错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xed in position 59: invalid continuation byte
它抱怨的结果是:
u'QNO XX Conjunto YY, No. Casa ZZ, CEP: AAAAAAAA, Bras\xedlia /DF'
具体而言,它应该是Brasília
而不是Bras\xedlia
。如何以更友好的方式对输出进行编码?我是否必须单独替换\xed
之类的每个可能的重音?
- 编辑:
我知道í
(latin-1
)中的0xED是iso-8859-1
,并且考虑到语言(以及来自db负责人的信息),我认为这是正确的编码。如何将'Bras\xedlia'
的字符串转换为一般'Brasília'
的字符串,知道这一点?
- 编辑:
如果我尝试使用str(that thing)
我得到的是
'ascii' codec can't encode character u'\xed' in position 52: ordinal not in range(128)
答案 0 :(得分:0)
您需要更改字段和桌子的字符集。
要执行此操作,请执行以下操作之一:
mysql> ALTER TABLE <table> CONVERT <col> VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
(2,3)
或强>
mysql> ALTER TABLE <table> MODIFY <col> VARCHAR(50) CHARACTER SET utf8;
(2,3)
我更喜欢第一个。
最后,正如Klaus D.所说,您需要使用charset="utf8"
连接到mysql,请检查link
答案 1 :(得分:0)
这听起来像是xlswriter
的问题,而不是python或MySQL。
0xED表示进入的字节是latin1,而不是utf8,而不是ascii。如果您遇到0xED,那么执行SET NAMES latin1
以便python与MySQL正确通信。表格/列是CHARACTER SET latin1
还是utf8
并不重要,SET NAMES
会导致INSERT
/ SELECT
期间发生合适的转化(如果有) /等