python 读取csv,写入数据库后中文为16进制串,如何存储为中文?

zhangzs 发布于 2015/05/28 13:57
阅读 1K+
收藏 1
python2.7.9读取csv的其中一列得到这样的结果:
\xc9\xcc\xc6\xb7\xb2\xe2\xca\xd4
导致存储到mysql也是这个十六进制串

我怎么才能存储为中文?

        with open('123.csv','rb') as cf:
            reader = csv.reader(cf)
            for row in reader:
                if reader.line_num==240:
                    list1=['tradeTime','productName']
                    tradeTime=row[0].replace('`','')
                    productName=row[20].replace('`','').encode("gb2312")
                    list2=[tradeTime,productName]
                    logging.debug("productName={0}".format(productName))
                    sorderData=dict(zip(list1,list2))
                    logging.debug(sorderData)
日志如下:
2015-05-28 13:26:33,244 productName=商品测试
2015-05-28 13:26:33,244 {'tradeTime': '2015-05-15 11:06:47', 'productName': '\xc9\xcc\xc6\xb7\xb2\xe2\xca\x

导致存储到数据库中的'productName为\xc9\xcc\xc6\xb7\xb2\xe2\xca\xd4
请问如何存储为“商品测试”
加载中
0
z
zhangzs

引用来自“雪梨苹果”的评论

productName=row[20].replace('`','').encode("gb2312")

原因是这里,你将内容从unicode转成了gb2312

在Windows下测试的结果是:

productName=row.replace('`','').decode("utf-8"),结果正常

在Linux下如果使用以上语句,返回的是二进制,后更改为:

productName=row.replace('`','').decode("gb2312") ,结果正常

 

感谢“雪梨苹果”

 

0
jk409
jk409
检查下编码,,,
0
雪梨苹果
雪梨苹果

productName=row[20].replace('`','').encode("gb2312")

原因是这里,你将内容从unicode转成了gb2312

雪梨苹果
雪梨苹果
过程就是:先知道csv是什么编码的,然后读取,将数据decode成unicode,处理完传给mysql就行,不需要你自己encode的。
0
狗操_我今年大三它妈
狗操_我今年大三它妈
在读入CVS时就指定编码格式参数,再插入数据库就如你所愿了。
0
z
zhangzs
# -*- coding: utf-8 -*-
//更改了如下
productName=row[20].replace('`','').decode("utf-8")
目前返回:
2015-05-28 17:03:22,960 鍟嗗搧娴嬭瘯
2015-05-28 17:03:22,960 {'tradeTime': '2015-05-15 11:06:47', 'productName': u'\u5546\u54c1\u6d4b\u8bd5'}
再次使用时,.encode("utf-8")应该就可以了.
返回顶部
顶部