如何使用7zip(lzma)读取python中的utf-8编码文件
我正在使用以下命令压缩文件:如何使用7zip(lzma)读取python中的utf-8编码文件,python,string,encoding,compression,lzma,Python,String,Encoding,Compression,Lzma,我正在使用以下命令压缩文件: import lzma myData = ("12+34+113+32+81+92+27...").encode() obj = lzma.LZMAFile(filename, mode="wb") obj.write(myData) obj.close() 然后我试着打开它 obj = lzma.LZMAFile(filename, mode="rb") data = obj.read() 但我得到U
import lzma
myData = ("12+34+113+32+81+92+27...").encode()
obj = lzma.LZMAFile(filename, mode="wb")
obj.write(myData)
obj.close()
然后我试着打开它
obj = lzma.LZMAFile(filename, mode="rb")
data = obj.read()
但我得到UNICODECODEERROR:“utf-8”编解码器无法解码位置0中的字节0xfd:无效的起始字节
为什么没有编码错误,只有解码错误?
我尝试压缩字符串以保存字节。从第50行开始,以二进制模式创建LZMA压缩文件,其位置参数等效于
filename=mode,mode=“wb”
:
如果压缩和冗余:
打印(“编码和压缩…”)
aux=(aux[:-1])。编码(“utf-8”)
obj=lzma.LZMAFile(模式,“wb”)
打印(“写入文件”)
对象写入(辅助)
对象关闭()
返回0
然后将aux
(类型为bytes
)写入LZMA压缩文件
从第121行开始,使用3个位置参数调用lzma.open()
,显示的参数无效。最多可以有2个位置参数,然后其他所有参数都必须使用关键字参数指定。除此之外,r+b
未作为模式
参数的有效值列出。文件规定:
对于二进制模式,模式参数可以是“r”、“rb”、“w”、“wb”、“x”、“xb”、“a”或“ab”中的任意一个,对于文本模式,模式参数可以是“rt”、“wt”、“xt”或“at”。默认值为“rb”
如果压缩:
打印(“启动解压缩…”)
以lzma.open(文件[i]、“r+b”、“utf-8”)作为lzmaFile:
#obj=lzma.LZMAFile(文件[i],mode=“r”)
fContent=lzmaFile.read()
最初写入lzma文件时,您编写了一个bytes
对象。当您读取lzma文件时,您再次得到相同的bytes
对象。要获取原始的str
,请调用bytes
对象的decode()
方法,使用与编码相同的编码(在本例中为utf-8
)
如果压缩:
打印(“启动解压缩…”)
将lzma.open(文件[i])作为f:
未压缩_str=f.read().decode(“utf-8”)
只要我删除filenames
中的s
,就可以了:obj=lzma.LZMAFile(filename,mode=“rb”)
到obj=lzma.LZMAFile(filename,mode=“rb”)
这是一个最小的复制代码。原件在这里。而且我试了很多次都没能修好。也许我应该开发一个模块来使用C编写文件?我找不到解决办法。没有必要开发一个使用C编写文件的模块。请始终参阅。仔细阅读。特别注意函数/方法签名。关于传递参数,似乎你正在尝试一切/任何事情,并希望得到最好的结果。实际上,你发现了错误。我以前打开过这个文件,因此崩溃了。无论如何,谢谢你的时间和良好的反应。当我获得更多的声誉时,我会把你的答案标记为解决方案。