[英]UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
[英]Python: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
我正在从目录中获取数据,它以字节格式提供数据。
字节数据:
b'\x80\x00\x00\x00\n\x00\x00%\x83\xa0\x08\x01\x00\xbb@\x00\x00\x05p
\x02\x00>\xf3\x00\x00\x00}\x02\x00`\x03\xef0\x00\x00\r\xc0
\x06\xf0>\xf3\x00\x00\x02\x88\x02\x03\xec\x03\xef0\x00\x00/.....'
在将此数据转换为字符串或任何可读格式时,我收到此错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
我使用的代码(Python 3.7.3):
blobs = blob.decode('utf-8')
和
import json
json.dumps(blob.decode())
我也使用过pickle
、 ast
和pprint
但它们在这里没有帮助。
我尝试了什么:
您可以尝试忽略不可读的块。
blobs.decode('utf-8', 'ignore')
这不是一个很好的解决方案,但是您生成字节 object 的方式存在一些问题。 也许, utf-8
不是您数据的正确编码。
UTF-8 编码具有一些内置冗余,至少有两个用途:
起始字节(以携带实际数据的二进制点表示)匹配这 4 种模式之一
0.......
110.....
1110....
11110...
而连续字节(0到3)总是这种形式
10......
如果不遵守此编码,则可以肯定地说它不是 UTF-8 数据,例如因为在传输期间发生了损坏。
为什么可以说b'\x80\'
不能是UTF-8? 已经在前两个字节处违反了编码:因为 80 必须是连续字节。 这正是您的错误消息所说的:
UnicodeDecodeError:“utf-8”编解码器无法解码 position 中的字节 0x80 0:无效的起始字节
即使你跳过这个,你也会在b'%\x83'
一些字节后遇到另一个问题,所以很可能你要么试图解码错误的数据,要么假设错误的编码。
您示例中的数据显然不是任何常见编码的文本。 Python 和我们都无法找到将显然不是文本的数据转换为字符串的方法。
如果这是一种定义明确的二进制文件格式,请找到该格式的解析器(理想情况下是流行的 Python 库,但对于更晦涩或专有的格式,您可能无法找到)或自己编写一个数据是结构化的,要么通过巧妙的实验和良好的猜测,要么通过查找(如果不是权威的,那么可能或多或少具有推测性的第三方)文档。
如果您只是想将字节转换为具有相同 Unicode 代码点的代码点字符串(例如,输入字节\xff
映射到 Unicode 代码点U+00FF ),则'latin-1'
编码会执行此操作,晦涩但方便。 这种情况下的结果显然不是有用的人类可读文本; 在许多方面,将数据保留为bytes
会更自然,更不容易出错并且更方便。
对于这个编码错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
或其他类似的,您只需打开扩展名为.json的数据库文件并将编码更改为 UTF-8(例如在 VScode 中,您可以在右下角导航栏中进行更改)并保存文件...
现在运行
$ git status
你会有这样的结果
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: store/dumps/store.json
(use "git add <file>..." to include in what will be committed)
.gitignore
no changes added to commit (use "git add" and/or "git commit -a")
或类似的东西
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: store/dumps/store.json
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
对于第一种情况,你只需要这样做
$ git add store/dumps/
第二种情况不需要前面的部分......
现在,对于这两种情况,您必须提交更改
$ git commit -m "launching to production"
控制台将返回一条消息,通知您添加和更改...
您必须再次为应用程序构建日志
$ git push heroku master
(适用于 heroku 用户)
构建后,您只需要再次加载数据库
heroku run python manage.py loaddata store/dumps/store.json
它将安装对象。/。
为我的英语水平找借口!!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.