python读文件编码问题(python 读取文件编码)

http://www.itjxue.com  2023-03-30 21:04  来源:未知  点击次数: 

python文件编码问题

还真有些弄不明白。不过我就明白的给你说。

不要用记事本,另存改变编码,除非你目标编码是ANSI

只要是文字都是字符编码,不可能是内存中的编码格式。WINDOWS使用MBCK(类似这个名子)的内部编码。就是多字节编码的方式存在内存里。但是存在文件里一定是字符串,一定是正式的国际编码。

ANSI是操作系统内的标准编码。对于通常来说就是GB18030

unicode有很多编码方式。包括utf-8,utf-16, big-5, gbk, gb18030等。所以这里微软说的unicode估计是给微软程序做序列化用的格式

unicode big endian同上。这个编码应该是一个长字节编码用的。

顺便说一下,微软记事本的UTF-8编码文件有问题,前面有1-2个字节的识别用字符。如果你用python或者是其它操作系统读取文件,可能会出问题。

python读取文件,描述错误的是

需要更具体的信息才能回答这个问题。以下是一些可能导致 Python 读取文件错误的情况:

1. 文件路径错误:如果您提供的文件路径不正确,Python 将无法找到文件并读取其内容。请确保文件路径正确,并且文件存在于指定的位置。

2. 文件格式错误:如果您尝试读取的文件格式与您的读取代码不兼容,Python 将无法读取文件。例如,如果您尝试使用文本读取代码读取二进制文件,或者尝试使用 JSON 读取代码读取 XML 文件,Python 将会报错。

3. 文件权限错误:如果您尝试读取未授权的文件,Python 将无法读取其内容并报错。请确保您有足够的权限来读取文件,并且文件未被锁定或占用。

4. 文件过大:如果您尝试读取过大的文件,Python 可能会出现内存不足或读取超时的错误。请确保您的代码能够处理大型文件,并且不会占用过多的内存或 CPU 资源。

5. 文件编码错误:如果您尝试读取的文件使用了错误的编码方式,Python 将无法正确读取文件内容。请确保您使用正确的编码方式来读取文件,并且文件的编码方式与您的代码相匹配。

这些是可能导致 Python 读取文件错误的一些情况。如果您能够提供更具体的错误信息和代码示例,我们可以更准确地诊断问题并提供更好的解决方案。

python读取文件解决‘utf8’ codec can’t decode byte 0xa1的问题

一般这种文件存在类似字符:

如果UTF-8搞不定,可以采取ISO-8859-1编码方式解决:

最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。

很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然"中文"两个字不存在iso8859-1编码,以gb2312编码为例,应该是"d6d0 cec4"两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:"d6 d0 ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节"e4 b8 ad e6 96 87"。很明显,这种表示方法还需要以另一种编码为基础。

需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而unicode又可以用来表示所有字符,所以在很多软件内部是使用unicode编码来处理的,比如java。

注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。

Python 读写文件的编码与解码问题

演示文件为docx文档,内容如下:

源码

运行源码查看报错信息

UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 15: illegal multibyte sequence

上述错误是一种很常见的解码错误,下面介绍该错误的解决方法

把utf-8,gbk等各种编码方式都试了一遍,还是没有解决问题然后仔细看报错信息,根据UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfb in position 14: invalid start byte,猜测文件中某个字节不能解码,打开文件一看,并没有看出什么问题来

open() 函数的第三个参数不是用来接收编码方式的,而是传入一个buffering的值,此处传入了'gbk'字符串,所以系统提示传一个整型

通过调用office的API进行操作,因为在office上能完成的操作,都能通过win32完成,所以我们选择使用win32

(Python3.5 需要安装 win32compat,里面含了 win32 的很多包)

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

【问题】

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)成另一种编码。

(责任编辑:IT教学网)

更多

推荐微软认证文章