python解决csv文件用excel打开乱码问题

Python024

python解决csv文件用excel打开乱码问题,第1张

【问题】

python输出的csv文件用excel打开,里面的中文会变成乱码,但用window下的记事本或mac下的numbers打开就正常显示。

原因是python输出的文件是utf-8编码写入的,excel默认以gbk方式读取,导致乱码发生。

【解决方法1】文件产出时encoding设置为utf-8-sig    

用excel打开csv时,excel会先检查文件的第一个字符,来了解这个文件是什么编码方式,如果这个字符是BOM,excel就知道用utf-8的方式打开这个文件。python自带了处理BOM的编码方式uft-8-sig,因此只需要在文件产出时将encoding设置为utf-8-sig。

如果文件不是由python产出的,只需要以utf-8方式读入再以utf-8-sig方式存储即可

【解决方法2】懒人法,适用只含简体中文的文件

用记事本打开,点击另存为,右下角编码方式选择“ANSI”,这个过程是把这个文件改成gbk编码格式,excel就是默认用gbk方式打开的。

参考: Python写的csv文件,如何让 Excel 双击打开不乱码? - 云+社区 - 腾讯云

对编码格式一窍不通的可以阅读以下网页

python笔记——二进制和文件编码_砍柴姑娘Jourosy的博客-CSDN博客

编码方式之ASCII、ANSI、Unicode概述 - 蓝海人 - 博客园

【简单总结】:

1. 首先需要了解 字符集 和 字符编码 两个概念,字符集定义了字符和二进制的一一对应关系,字符编码规定了如何将字符的编号存储到计算机中。

2. Unicode是字符集,包含了全球文字的唯一编码,utf-8是编码方式,将unicode以某种方式存储到计算机中。

3. 有些字符集和编码是结合在一起的,称作字符集还是编码都无所谓,比如ASCII,GBK

4. ANSI是各个国家地区不同扩展编码方式的总称,互不兼容(可以看出来通用性没有utf好)

5. 不同编码方式在转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

主要“()”不要用中文括号

冒号不要用中文冒号

引号不要用中文引号

只有要打印的输入内容可以用中文的。

以上最好检查一遍,因为我打的时候经常打错,最好删了重打,因为两种括号太难区分了。

在命令行终端上工作时,经常会碰到一个头疼的问题就是中文乱码。下面我们就来看一下解决python在终端输出乱码的解决方法。

牵涉编码的地方一共有五处:

Python代码文件前两行声明的编码

Python代码文件实际存储所使用的编码

Vim的显示编码

Linux系统的文件编码

SecureCRT等终端设置的显示编码

严格来讲,五码一致的时候,如果文件没有损坏,应该是能够正常显示了。

Python编码声明:

如果python代码文件中包含中文,就一定要在代码文件的前两行(注意:一定要是前两行)做出编码声明,否则python代码默认采用ASCII保存,这样遇到中文字符就会报错。在代码头部声明编码的方式有三种:

# coding=<encoding name>

# -*- coding: <encoding name>-*-

# vim: set fileencoding=<encoding name>

Vim中有关编码的选项:

在 Vim 中,有四个与编码有关的选项,它们是:fileencodings、fileencoding、encoding 和 termencoding。

Linux系统的编码设置:

Linux的系统编码设置可以通过设置locale来完成,直接在命令行敲locale,然后回车,即可查看当前系统的编码设置,与保存文件相关的设置是LC_CTYPE。

如LC_CTYPE=zh_CN.gb18030,即把系统的编码设置成为了gb18030。

更多Python知识请关注Python自学网