python上MySQLdb查询结果的编码问题

2024-06-26 17:53:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python的库MySQLdb来访问一个带有葡萄牙语条目的数据库,并使用一系列重音符号,然后使用xlsxwriter将其保存到Excel文件中。关闭工作簿以保存时,出现以下错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xed in position 59: invalid continuation byte

它抱怨的结果是:

^{pr2}$

具体来说,它应该是Brasília,而不是{}。我怎样才能以更友好的方式对输出进行编码?我是否必须将\xed等替换为每个可能的重音?在

--编辑:

我知道0xED是latin-1iso-8859-1)中的í,并且给定了语言(以及数据库负责人的信息),我认为这是正确的编码。知道了这一点,如何将一个'Bras\xedlia'的字符串转换为'Brasília'的字符串?在

--编辑:

如果我尝试使用str(that thing)我得到的是

'ascii' codec can't encode character u'\xed' in position 52: ordinal not in range(128)

Tags: 字符串in目的数据库编辑编码positionbyte
2条回答

您需要更改字段和表的字符集。在

为此,请运行以下操作之一:

mysql> ALTER TABLE <table> CONVERT <col> VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci;23

mysql> ALTER TABLE <table> MODIFY <col> VARCHAR(50) CHARACTER SET utf8;23

我想要第一个。在

最后,正如Klaus D.所说,您需要使用charset="utf8"连接到mysql,请检查link

这听起来像是xlswriter的问题,而不是python或MySQL。在

0xED表示传入的字节是拉丁1,不是utf8,不是ascii。如果您一直使用0xED,那么请执行SET NAMES latin1,这样python就可以与MySQL正确通信了。如果cd6{cd6}在转换过程中{cd6}不适合,那么{/cd6}都不会发生

相关问题 更多 >