Flask中(file)后的⽂件对象在读取时(中⽂)乱码
⽂章⽬录
⼀、问题引出
我们通常需要接收前端发送过来的⽂件,⽽在Flask中通常采取file_obj = (‘file’) 的⽅式获取⽂件对象,按照Flask官⽅⽂档的介绍,返回值 file_obj 是⼀个⽂件对象,但是我们平常在使⽤时通常是在open() 函数中指定打开⽅式的,可是这⾥并不知道这个⽂件对象中的数据是何种编码⽅式,因此就会出现中⽂乱码的问题。如下所⽰:当上传的⽂件内容中包含中⽂时就会出现乱码:
getsavefilenamefile_obj = ('file')
file_content = ad()
print('答案内容为:', file_content)
⼆、解决过程探索
通过Flask的官⽅⽂档及源码得知:
1. request.files 包含了所有上传⽂件的MultiDict对象。⽂件中的每个键都是来⾃ "的名称。⽂件中的每个值都是⼀个Werkzeug
FileStorage对象。
2. ⽽类 FileStorage 是被这样描述的:FileStorage类是传⼊⽂件的⼀个简单包装。请求对象使⽤它来表⽰上传的⽂件。并且
FileStorage 提供了⼀些⽅法,最长⽤的就是如下⼏个:
filename   The filename of the file on the client.
name   The name of the form field.
save   (dst, buffer_size=16384)Save the file to a destination path or file object. If the destination is a file object you have to close it yourself after the call. The buffer size is the number of bytes held in memory during the copy process. It defaults to 16KB. 等等
但是并没有到Flask在得到这个⽂件对象时的编码⽅式。
三、解决办法
先从⽂件对象中将内容读出,然后再按照我们想要的格式解码(通常 utf-8)。
file_obj = ('file')
file_content = ad()
file_content = file_content.decode("utf-8")
print('答案内容为:', file_content)
这样⽂件中的中⽂内容就不会乱码了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。