Mal*_*umi 7 python unicode byte file utf-8
我收到这个错误:
\n\nUnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xff in position: 0, invalid start byte\nRun Code Online (Sandbox Code Playgroud)\n\n我找到了这个解决方案:
\n\n>>> b"abcde".decode("utf-8")\nRun Code Online (Sandbox Code Playgroud)\n\n从这里开始: \n将字节转换为 Python 字符串
\n\n但是,如果 a)您不\xe2\x80\x99 不知道 0xff 在哪里和/或 b)您需要解码文件对象,您如何使用它?正确的语法/格式是什么?
\n\n我正在解析一个目录,因此我尝试一次浏览一个文件。(注意:当项目变大时,这将不起作用!!!)
\n\n>>> i = "b\'0xff\'"\n>>> with open(\'firstfile\') as f:\n... g=f.readlines()\n... \n>>> i in g\nFalse\n>>> 0xff in g\nFalse\n>>> \'0xff\' in g\nFalse\n>>> b\'0xff\' in g\nFalse\n\n>>> with open(\'secondfile\') as f:\n<snip - same process>\n\n>>> with open(\'thirdfile\') as f:\n... g = f.readlines()\n... \nTraceback (most recent call last):\nFile "<stdin>", line 2, in <module>\nFile "/usr/local/lib/python3.4/codecs.py", line 313, in decode\n(result, consumed) = self._buffer_decode(data, self.errors, final)\nUnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xff in position 0: invalid start byte\nRun Code Online (Sandbox Code Playgroud)\n\n因此,如果这是正确的文件,并且如果我无法使用 Python 打开它(我将其放入 sublime text 中,但什么也没找到),我该如何解码或编码呢?\n谢谢。
\n你有很多问题:
i = "b'0xff'"创建一个 7 字节的字符串,而不是单个 0xFF 字节。 i = b'\xff'或者i = bytes([0xff])是正确的方法。
open默认使用 . 返回的编码来解码文件local.getpreferredencoding(False)。以二进制模式打开以获取原始未解码字节:open('firstfile','rb').
g=f.readlines()返回行列表。 i in g检查i 的内容与行列表中一行的内容是否完全匹配。
反而:
byte = b'\xff'
with open('firstfile','rb') as f:
file_content = f.read()
if byte in file_content:
...
Run Code Online (Sandbox Code Playgroud)
要解码文件,您需要知道它的正确编码并在打开文件时提供它:
with open('firstfile',encoding='utf8') as f:
file_content = f.read()
Run Code Online (Sandbox Code Playgroud)
如果您不知道编码,第 3 方chardet模块可以帮助您猜测。
#how to decode byte 0xff in python
Run Code Online (Sandbox Code Playgroud)
我们知道这是十六进制编码,因此 utf-8、编解码器和其他解码器无法将此字节解码为字符串。这里我们将使用“UTF-16”或“utf-16”编码将0xff字节数组解码为字符串或ASCII字符。
让我帮助您理解这一点:
st = "this world is very beautiful"
print(st.encode('utf-16'))
>>>b'\xff\xfet\x00h\x00i\x00s\x00 \x00w\x00o\x00r\x00l\x00d\x00 \x00i\x00s\x00 \x00v\x00e\x00r\x00y\x00 \x00b\x00e\x00a\x00u\x00t\x00i\x00f\x00u\x00l\x00'
Run Code Online (Sandbox Code Playgroud)
我们再次希望将其转换为简单的 ASCII 字符。有两种方法可以将 0xff 代码解码为简单字符串。
st = b'\xff\xfet\x00h\x00i\x00s\x00 \x00w\x00o\x00r\x00l\x00d\x00 \x00i\x00s\x00 \x00v\x00e\x00r\x00y\x00 \x00b\x00e\x00a\x00u\x00t\x00i\x00f\x00u\x00l\x00'
Run Code Online (Sandbox Code Playgroud)
首先是:
print(str(st, "utf-16"))
Run Code Online (Sandbox Code Playgroud)
第二是:
print(st.decode('UTF-16'))
Run Code Online (Sandbox Code Playgroud)
我们将得到字符串作为输出:
>>>'this world is very beautiful'
Run Code Online (Sandbox Code Playgroud)