Python 在mongo集合中保存微符号字符

Python 在mongo集合中保存微符号字符,python,unicode,python-unicode,Python,Unicode,Python Unicode,我正在编写一个python脚本来创建一个基于MySql数据库的mongo集合。问题在于微符号字符: bson.errors.InvalidStringData: strings in documents must be valid UTF-8: '\xb5g' 我尝试用不同的代码(utf-8、latin-1、cp1252、iso-8859-2)对值进行编码/解码,但没有成功,但总是出现以下错误: UnicodeDecodeError: 'ascii' codec can't decode by

我正在编写一个python脚本来创建一个基于MySql数据库的mongo集合。问题在于微符号字符:

bson.errors.InvalidStringData: strings in documents must be valid UTF-8: '\xb5g'
我尝试用不同的代码(utf-8、latin-1、cp1252、iso-8859-2)对值进行编码/解码,但没有成功,但总是出现以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xb5 in position 0: ordinal not in   range(128)
这是从mysql数据库获取数据的代码。该数据库为美国农业部数据库:


带有微符号字符的字段是nutdef.Units one。

请尝试将字符解码为拉丁语-1:

a = '\xb5g'
# '\xb5g'
print a
# ?g

b = a.decode('latin-1')
print b
# µg

b
# u'\xb5g'
或者,您可以通过告诉MySQL连接在所有CHAR、VARCHAR和文本字段上使用unicode来修复此问题:

MySQLdb.connect(..., use_unicode=True)

只需尝试将字符解码为拉丁语-1:

a = '\xb5g'
# '\xb5g'
print a
# ?g

b = a.decode('latin-1')
print b
# µg

b
# u'\xb5g'
或者,您可以通过告诉MySQL连接在所有CHAR、VARCHAR和文本字段上使用unicode来修复此问题:

MySQLdb.connect(..., use_unicode=True)


只有在尝试对bytestring(尚未解码为unicode的文本)进行编码时,才会出现该错误。如果您试图使用特定编码自己调用
解码
,则会得到不同的
UnicodeDecodeError
。你如何连接到MySQL数据库,我们能看到代码吗?@MartijnPieters:OP说他们正在使用mongodb@jdi:不,OP说数据来自MySQL,存储在Mongo中。(基于MySql数据库创建了一个mongo集合)。我感觉在从MySql中提取信息之前执行
设置名称“UTF8”
应该可以解决这个问题。DBCONF中有什么?只有主机、用户名和密码,或者还有其他信息吗?只有在尝试编码bytestring(文本尚未解码为unicode)时才会出现该错误。如果您试图使用特定编码自己调用
解码
,则会得到不同的
UnicodeDecodeError
。你如何连接到MySQL数据库,我们能看到代码吗?@MartijnPieters:OP说他们正在使用mongodb@jdi:不,OP说数据来自MySQL,存储在Mongo中。(基于MySql数据库创建了一个mongo集合)。我感觉在从MySql中提取信息之前执行
设置名称“UTF8”
应该可以解决这个问题。DBCONF中有什么?只有主机、用户名和密码,或者还有其他信息吗?OP说他们已经试过了…愚蠢的我,我试过将字符解码为拉丁-1,但我认为解码已经到位了。jdi发布的方式非常有效。@MartijnPieters:显然不是:-)@jdi:Heh。投票结束,因为太本地化了;这个问题的前提是不正确的。OP说他们已经试过了…愚蠢的我,我试过把字符解码为拉丁-1,但我认为解码已经到位了。jdi发布的方式非常有效。@MartijnPieters:显然不是:-)@jdi:Heh。投票结束,因为太本地化了;这个问题的前提是错误的。