不知道文件的编码方式,如何将文件解码和转码

不知道文件的编码方式,如何将文件解码和转码

不知道某文件的编码格式(文件名为cz2-1.log),使用记事本和UltraEdit时打开都是乱码,如:

http://img1.sycdn.imooc.com//climg/5dc3dafe093e360907280484.jpg

那么encoding关键字中应该输入什么样的解码方式才能将其解码?

尝试使用‘utf-8’、'gbk'、‘gb18030'解码,分别会报错误:

'utf-8' codec can't decode byte 0xd4 in position 88: invalid continuation byte

'gbk' codec can't decode byte 0x80 in position 425: illegal multibyte sequence

'gb18030' codec can't decode byte 0x80 in position 425: illegal multibyte sequence

使用二进制解码:open('cz2-1.log', 'rb'),倒是没有报错,但准备将读出来的二进制字节码以文本文件的形式写入到一个新的文件时,会报错:

http://img1.sycdn.imooc.com//climg/5dc3dd2909d2512d02920151.jpg

'utf-8' codec can't decode byte 0xd4 in position 88: invalid continuation byte

看来还是在解码的时候没有得到正确解码啊

在网上搜索了一些,说可从上述窗口的右下角知道该文件的编码方式为ANSI,但在python解释器中使用

f = open('cz2-1.log', 'r', encoding='ANSI')解码时会报错误:

'mbcs' codec can't decode byte 0x81 in position 516: No mapping for the Unicode character exists in the target code page.

已经蒙圈了。。

是否有一种方式可以知道该文件的编码方式并且用python正确解码呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手乔木 2019-11-07 18:28:15

同学你好:

同学可以使用当前文档将其另存为其他的编码格式。

http://img1.sycdn.imooc.com//climg/5dc3f12409f86c6a08960210.jpg

2

import chardet
import codecs
#修改文件格式
def convert(filename,out_enc='utf-8'):
    content = codecs.open(filename,'rb').read()
    source_encoding = chardet.detect(content)['encoding']
    print(source_encoding)
    if source_encoding != out_enc:
        content = content.decode(source_encoding).encode(out_enc)
        codecs.open(filename,'wb').write(content)

需要用到python的chardet模块,这个模块可以解析出文件的编码,然后就可以对文件解码,之后就以指定的编码进行编码,在写进入,这样就完成了文件编码格式的改变。
注意:在这读写的时候都是字节形式的。

如果我解决了同学的问题,请采纳!学习愉快^_^。

  • 提问者 神羅ten徵 #1
    老师您好, 1、使用txt将其保存为其他的编码格式(如UTF-8),重新打开后显示和原文件一样依然是乱码,无法解决。是不是因为原文件没有通过正确的方式解码,即使改变了编码方式,仍然无法正确显示内容? 2、执行上述convert函数,得到的结果先是None,然后报错:TypeError: decode() argument 1 must be str, not None 看来是因为source_encoding的结果为None而导致后面的程序没法运行。请问还有什么解决办法呢?
    2019-11-08 17:58:07
  • 好帮手慕美 回复 提问者 神羅ten徵 #2
    同学,你好。可能同学的原文件已经损坏,内容为乱码的格式,因此再转换格式也会显示乱码。同学可以将.log文件使用Notepad++软件打开(在没有任何操作前提下),若显示正常,则可以将内容重新复制到pycharm中打开的文件即可。或者同学可以使用其他扩展名的文件进行操作。祝学习愉快~~~~
    2019-11-08 18:53:26
  • 提问者 神羅ten徵 回复 好帮手慕美 #3
    老师您好。使用Notepad打开,仍然为乱码,而且我确定文件没有损坏。 这个文件为一个工程专业软件的导出文件,可以使用该专业软件解码,但该软件必须要连接到服务器使用,而且没法批量解码,所以说使用会受到限制。现在是想使用一种通用的方法将其解码,请问还有其他方式吗?T_T
    2019-11-12 10:02:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师