博客
关于我
python笔记5-python2写csv文件中文乱码问题
阅读量:468 次
发布时间:2019-03-06

本文共 1258 字,大约阅读时间需要 4 分钟。

前言

在Python2中处理中文编码问题时,常常会遇到诡异的现象。尤其是在存储如列表、元组或字典中的中文字符时,简单地打印输出会显示为Unicode编码,这让人无从下手。面对这些问题,很多开发者可能会陷入迷宫般的编码纠结中。然而,实际上,这些问题的根源可以通过一个简单的决定来解决——尽早地选择Python3作为编程语言。

CSV文件中的中文乱码

在Python2中,处理CSV文件中的中文字符时,可能会遇到乱码问题。以下是常见的两种情况:
  • 写入时的乱码

    当使用csv.writer将包含中文的数据写入文件时,可能会出现乱码现象。这种情况通常是由于Python2内部使用的str类型和unicode类型的编码方式与Windows系统的默认编码gb2312不兼容所致。

  • 读取时的乱码

    当打开CSV文件时,读取到的中文字符可能会呈现乱码状态。这同样是由于编码方式的不兼容所导致的。

  • 编码与解码的基础知识

    在Python2中,字符串的编码方式分为`str`和`unicode`两种。然而,当操作文件时,系统的编码方式往往会干扰这一设置,导致乱码问题。具体来说:
    • 写入时的解决方法

      在写入文件之前,将字符串先转换为utf-8编码,再将其转换为目标编码(如gbk)进行写入。

    • 读取时的解决方法

      反之,当读取文件时,需要先将文件的编码方式(如gbk)转换为utf-8,然后再进行处理。

    解决方案

    针对上述问题,以下是两个常用的解决方案:
  • 手动编码转换(不推荐)

    这种方法虽然可行,但操作繁琐,且容易出错。具体步骤如下:

    # coding:utf-8import csvf = open("xieru1.csv", 'wb')writer = csv.writer(f)data = ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"]for i in data:    writer.writerow(i.decode("utf-8").encode("gbk"))f.close()
  • 使用codecs库(推荐)

    codecs库提供了一种更简单的方式来处理文件的编码转换。具体实现如下:

    # coding:utf-8import csvimport codecsimport sysreload(sys)sys.setdefaultencoding('utf8')f = codecs.open("xx.csv", 'wb', "gbk")writer = csv.writer(f)writer.writerow(["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"])writer.writerows([["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"], ...])f.close()
  • 通过上述方法,可以有效避免CSV文件中的中文乱码问题。当然,选择第二种方法会更加高效和简洁。

    转载地址:http://rbmbz.baihongyu.com/

    你可能感兴趣的文章
    opencv waitKey() 函数理解及应用
    查看>>
    OpenCV 中的图像转换
    查看>>
    OpenCV 人脸识别 C++实例代码
    查看>>
    OpenCV 在 Linux 上的 python 与 anaconda 无法正常工作.收到未实现 cv2.imshow() 的错误
    查看>>
    Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)上
    查看>>
    opencv 模板匹配, 已解决模板过大程序不工作的bug
    查看>>
    OpenCV 错误:(-215)size.width>0 &&函数imshow中的size.height>0
    查看>>
    opencv&Python——多种边缘检测
    查看>>
    opencv&python——高通滤波器和低通滤波器
    查看>>
    OpenCV+Python识别车牌和字符分割的实现
    查看>>
    OpenCV-Python接口、cv和cv2的性能比较
    查看>>
    OpenCV/Python/dlib眨眼检测
    查看>>
    opencv1-加载、修改、保存图像
    查看>>
    opencv10-形态学操作
    查看>>
    opencv11-提取水平直线和垂直直线
    查看>>
    opencv12-图像金字塔
    查看>>
    opencv13-基本阈值操作
    查看>>
    opencv14-自定义线性滤波
    查看>>
    opencv15-边缘处理
    查看>>
    opencv16-Sobel算子
    查看>>