在Python上读取文件时,我得到了一个UnicodeDecodeError。我该怎么做才能解决这个问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python上读取文件时,我得到了一个UnicodeDecodeError。我该怎么做才能解决这个问题?相关的知识,希望对你有一定的参考价值。

这是我自己的项目之一。这将有助于我正在玩的游戏中的其他人(AssaultCube)。其目的是分解日志文件并使用户更容易阅读。

我一直都是这个问题。有人知道怎么修这个东西吗?目前,我不打算编写/创建文件。我只想修复这个错误。

触发错误的行是一个空行(它在第66346行停止)。

这就是我的脚本的相关部分:

log  =  open('/Users/Owner/Desktop/Exodus Logs/DIRTYLOGS/serverlog_20130430_00.15.21.txt', 'r')
for line in log:

例外是:

Traceback (most recent call last):
  File "C:\Users\Owner\Desktop\Exodus Logs\Log File Translater.py", line 159, in <module>
    main()
 File "C:\Users\Owner\Desktop\Exodus Logs\Log File Translater.py", line 7, in main
    for line in log:
  File "C:\Python32\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 3074: character maps to <undefined>
答案

尝试:

enc = 'utf-8'
log = open('/Users/Owner/Desktop/Exodus Logs/DIRTYLOGS/serverlog_20130430_00.15.21.txt', 'r', encoding=enc)

如果它不起作用尝试:

enc = 'utf-16'
log = open('/Users/Owner/Desktop/Exodus Logs/DIRTYLOGS/serverlog_20130430_00.15.21.txt', 'r', encoding=enc)

你也可以尝试一下

enc = 'iso-8859-15'

也尝试:

enc = 'cp437'

这是非常古老,但它也有0x81的“ü”,适合我在攻击立方体的主页上找到的字符串“üßer”。

如果所有编码都错了,请尝试联系一些开发攻击立方体的人或者如评论中所述:看看https://pypi.python.org/pypi/chardet

以上是关于在Python上读取文件时,我得到了一个UnicodeDecodeError。我该怎么做才能解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

Python JSON确保编码[重复]

像在 python 中一样在 C++ 中读取二进制文件

Python 不读取整个文本文件

matlab与opencv读取同一帧视频时会得到不同的像素值

如果 RAM 不是问题,是逐行读取更快还是将所有内容读入 RAM 并访问它? - Python

在 Ubuntu 14.04 上使用 python 读取音频时出错