如果出现报错gbk codec这样的问题, 大家不妨尝试着一个可行的办法就是考虑把原来的文件格式去转换一下格式, 将其转换成我们比较熟悉的utf-8编码方式。
在编程的过程之中, 我们总是会碰见许多种类的错乱的状况, 有一个挺平常的差错是那个叫作“gbk codec can’t byte 0x80 in ”的字样出现的状况, 这种差错一般是发生在咱们正想要去读某个文件, 或者是正想要往某个文件中写东西的时候, 而且那个文件的编码形式并不是UTF-8格式的那一种情况出现的, 这是由于系统里面默认的编解码方式往往是设定为UTF-8的, 而GBK这种编码的方式, 并不是被程序所认可和支持的, 那么究竟要怎样才能把这个麻烦给解决掉?
在下面, 我将会非常详细地把关于如何把这个给解决掉的办法介绍清楚给大家听明白。
我们需要弄清楚编码和解码到底是怎么回事, 在计算机里面, 所有数据都存储在字节形式中, 人类无法直接看懂这些字节, 所以必须把这些字节转换成有意义的字符, 这个动作就叫编码, 反过来, 要把字符变成字节的话, 这个操作就称作解码, 各种编码方式都有自己的规则, ASCII编码只拿7位去表示字符, 而GBK编码会用16位来表示字符。
在我们准备去读一个文件或者是准备往文件里写数据的时候, 我们心里得清楚这个文件到底是用什么编码方式存的。要是文件的编码和我们用来处理的编码对不上号, 那肯定就会出错。举个例子来说吧, 如果你非要拿gbk这个编码格式去读取那个用UTF-8编码的文件的话, 系统立马就会报错, 告诉你出问题了。
具体的错误就是, 它会显示“gbk codec can’t byte 0x80 in ”这样的字样, 意思是你的gbk解码器在处理这个字节的的时候遇到了难题, 根本搞不定。
那么, 具体怎么来解决这个现存的难题呢? 我们完全可以借助于指定的这一模块去着手办理此事, 该种模块确实给大伙儿提供了一种可行的操作路径, 使得我们可以自行选定出一个特定的编码规则用以适配某单一文件的所有内容属性。
我们需要打开文件, 这里可以直接使用内置函数open(), 同时必须指出文件的编码格式是哪一种。
我们还可以通过加载模块里面的open()函数来实现对文件的开启操作, 并且明确标注出使用的编码方式具体是什么类型。假如我们希望采用gbk这一种编码方法去读取某个文档的话, 那么可以采取下面这种形式进行写法:
import codecs
file = codecs.open('filename', 'r', encoding='gbk')
在上面的代码中,’’是我们要打开的文件的名称,’r’表示我们要以读取模式打开文件,=’gbk’表示我们要以gbk编码方式打开文件。
我们可以选用read()这个函数, 然后呢, 来实施对文件内容的读取操作, 具体的代码如下所示:
content = file.read()
在上面给出的代码内部, 有一个变量存在, 这个变量将会包含着整个文件的实际内容信息。
为了结束对文件的操作, 我们必须执行一个关键的动作, 这个动作就是关闭文件, 而在实际操作过程中, 我们可以借助于close()这一函数来完成文件的关闭任务:
file.close()
在上面的代码里面, 使用file.close()这个操作就能够实现文件的关闭工作。
通过完成上述这些操作, 咱们就可以把那一个关于gbk编码无法处理0x80这个字节导致的错误给解决了。
在某些情形之下, 我们或许仍然有需求把数据存储到文件里面去, 这个时候我们就能够调用write()这个函数来进行数据的写入操作。
file = codecs.open('filename', 'w', encoding='gbk')
file.write(content)
file.close()
在上述代码之内, 那个单引号中间写着的字样, 就是咱们打算往里填写数据的那个文件的称呼。紧接着的那个w这个字母, 代表的是要把这个文件用一种允许往里面塞内容的开启方式给打开它。
然后那个等号和gbk这几个字符联合在一起的作用就在于声明了咱们要用这种特定的字符编码格式来处理写入操作。至于后面提到的变量这个东西, 它就是实际装着咱们准备写入内容的一堆数据本身。
解决那个“gbk codec can’t byte 0x80 in ”的错误, 实际上并没有多大难度。我们不妨这样做, 先把模块里的open()函数拿来用一用, 借着它去打开文件, 并且还要明确地指定文件的编码方式是怎么样子的。
等到把文件打开并读进去之后, 我们可以再选用read()函数来读取文件里面所存放的内容, 又或者, 也可以选择使用write()函数来往里面写入数据。最后一步, 也是必不可少的步骤, 那就是必须得用 close()函数来把文件关闭掉, 这样才算是一个完整的过程。
接下来, 我会依次提出四个问题和这篇文章有关联, 并且进行回答说明。
关于第一个问题, 我想问的是, 为什么在进行读取或者写入文件的操作过程中, 我们会遭遇编码错误, 内容大概是这样的: gbk 编解码器指出无法应对某个具体的字节值, 也就是十六进制的 0x80 出现在该位置的情况。
这是因为你试图用默认编码方式UTF-8来读取或者写入一个非UTF-8编码的文件, 并不支持GBK编码方式, 所以会出现这个错误。
针对那个已经出现的具体困境, 我们该采取什么样的实际步骤来完成最终的修复工作呢?
这个问题的解决方式是你可以使用的模块, 对于你来说可以使用这个模块里面的open()函数去打开文件, 在这个时候你需要指定一下文件的编码方式是怎么样的, 在接下来你可以利用read()函数把文件的内容读过来, 再或者你是可以用write()函数把数据写进去的, 最后一步操作是你需要调用close()函数让文件关闭。
关于第三点, 我想问的是, 具体存在哪些可行的技术手段可以帮助我完成对非utf-8编码文件的数据读取操作, 或者实现对这类文件的内容写入工作呢?
你可以使用模块来读取或者写入那些不是UTF-8编码的文件, 你可以调用模块里的open()函数来打开文件, 然后指定文件的编码方式, 你可以使用read()函数来读取这个文件的内容, 也可以使用write()函数来往里写入数据, 最后你需要使用close()函数把这个文件关掉。