python 七牛工具包 中文路径乱码解决方案
2017-03-21 14:19
609 查看
版本:qiniu==7.0.8
环境:Mac os 10.12.3
最近写了一套七牛上传的工具包,涉及到中文歌曲路径,就会报错:
查看问题代码位于/Users/ouyang/PycharmProjects/myApp/venv/lib/python2.7/site-packages/qiniu/services/storage/uploader.py”:
解决方案一
我们自己把所有的设计unicode的编码都手动改成utf-8,然后保证传进来的都是utf-8即可。
只需要修改两个文件的部分代码即可:
upload_process_recorder.py:
uploader.py:
这个只加了两行(143-144):
解决方案二
环境:Mac os 10.12.3
最近写了一套七牛上传的工具包,涉及到中文歌曲路径,就会报错:
File "/Users/ouyang/PycharmProjects/myApp/venv/lib/python2.7/site-packages/qiniu/services/storage/upload_progress_recorder.py", line 34, in get_upload_record record_file_name = base64.b64encode(key.encode('utf-8')).decode('utf-8') UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 5: ordinal not in range(128)
查看问题代码位于/Users/ouyang/PycharmProjects/myApp/venv/lib/python2.7/site-packages/qiniu/services/storage/uploader.py”:
def get_upload_record(self, file_name, key): key = '{0}/{1}'.format(key, file_name) record_file_name = base64.b64encode(key.encode('utf-8')).decode('utf-8') upload_record_file_path = os.path.join(self.record_folder, record_file_name) if not os.path.isfile(upload_record_file_path): return None with open(upload_record_file_path, 'r') as f: json_data = json.load(f) return json_data上面的file_name是unicode字符串,但key='{0}/{1}’.format(key, file_name)这里是容不下unicode字符串的。
解决方案一
我们自己把所有的设计unicode的编码都手动改成utf-8,然后保证传进来的都是utf-8即可。
只需要修改两个文件的部分代码即可:
upload_process_recorder.py:
# -*- coding: utf-8 -*- import base64 import json import os import tempfile class UploadProgressRecorder(object): """持久化上传记录类 该类默认保存每个文件的上传记录到文件系统中,用于断点续传 上传记录为json格式: { "size": file_size, "offset": upload_offset, "modify_time": file_modify_time, "contexts": contexts } Attributes: record_folder: 保存上传记录的目录 """ def __init__(self, record_folder=tempfile.gettempdir()): self.record_folder = record_folder def get_upload_record(self, file_name, key): if type(file_name) is unicode: file_name = file_name.encode('utf-8') key = '{0}/{1}'.format(key, file_name) # record_file_name = base64.b64encode(key.encode('utf-8')).decode('utf-8') record_file_name = base64.b64encode(key) record_file_name = record_file_name.replace('/', '_') # 去掉/字符的出现在路径的可能性 upload_record_file_path = os.path.join(self.record_folder, record_file_name) print record_file_name if not os.path.isfile(upload_record_file_path): return None with open(upload_record_file_path, 'r') as f: json_data = json.load(f) return json_data def set_upload_record(self, file_name, key, data): if type(file_name) is unicode: file_name = file_name.encode('utf-8') key = '{0}/{1}'.format(key, file_name) # record_file_name = base64.b64encode(key.encode('utf-8')).decode('utf-8') record_file_name = base64.b64encode(key) record_file_name = record_file_name.replace('/', '_') upload_record_file_path = os.path.join(self.record_folder, record_file_name) with open(upload_record_file_path, 'w') as f: json.dump(data, f) def delete_upload_record(self, file_name, key): if type(file_name) is unicode: file_name = file_name.encode('utf-8') key = '{0}/{1}'.format(key, file_name) record_file_name = base64.b64encode(key) record_file_name = record_file_name.replace('/', '_') # record_file_name = base64.b64encode(key.encode('utf-8')).decode('utf-8') record_file_path = os.path.join(self.record_folder, record_file_name) os.remove(record_file_path)
uploader.py:
这个只加了两行(143-144):
if type(self.file_name) is unicode: self.file_name = self.file_name.encode('utf-8')
解决方案二
# 修改文件名为非中文,不然七牛那边好麻烦...歌曲上传到七牛 song_path = full_file_path.replace(single_name, 'a.mp3') os.rename(full_file_path, full_file_path.replace(single_name, 'a.mp3’)) # 再把文件名改回去... os.rename(full_file_path.replace(single_name, 'a.mp3'), full_file_path)
相关文章推荐
- python爬取网页中文乱码。解决方案。python3
- 解决Heritrix镜像方式存储路径中文乱码的解决方案
- python2.x环境下unicode乱码转中文显示的2种解决方案总结
- python 中文乱码问题解决方案
- [Python] 中文路径和中文文本文件乱码问题
- Python的Print打印中文乱码解决方案
- 【python】蛋疼的中文乱码解决方案
- python getOpenFileName 中文路径乱码问题
- Python - Sublime Text 3 控制台输出中文乱码的解决方案
- 【Python】os.path.isdir中文路径返回false的解决方案
- python连接MySQL时,中文乱码解决方案
- python2.7中文乱码解决方案
- Python HTTP库requests中文页面乱码解决方案!
- python写入csv文件中文乱码解决方案
- url路径传中文显示乱码以及出现乱码解决方案
- >Python下使用subprocess中文乱码的解决方案
- python create_engine 连sql server 中文乱码 解决方案
- java中路径中参数值是中文,打印到页面是乱码的解决方案
- python2 接口测试 输入json 中文乱码解决方案。
- url路径传中文显示乱码以及出现乱码解决方案