开发者社区> 问答> 正文

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

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('','') <br />                     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
请问如何存储为“商品测试”

展开
收起
kun坤 2020-06-07 14:43:39 1081 0
1 条回答
写回答
取消 提交回答
  • 引用来自“雪梨苹果”的评论

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

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

    在Windows下测试的结果是:

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

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

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

     

    感谢“雪梨苹果”

     

    ######检查下编码,,,
    ######

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

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

    ######过程就是:先知道csv是什么编码的,然后读取,将数据decode成unicode,处理完传给mysql就行,不需要你自己encode的。######在读入CVS时就指定编码格式参数,再插入数据库就如你所愿了。
    ####### -*- 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")应该就可以了.
    2020-06-07 14:43:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载