七牛在上传文件 提交表单的时候 自定义变量 x:message 内容为中文returnBody 获得是乱码怎么办

请输入图片描述
图片是我设置的表单,应该是UTF8提交的
如下

upload_ret=eyJidWNrZXQiOiJneXBsdWNrIiwiZW5kVXNlciI6Ind0Z2FtZSIsImZuYW1lIjoiMTM2OTAyNDM1OC5qcGciLCJmc2l6ZSI6MTkwOTgsImhhc2giOiJGam9lclk4ZHJpR1c5enJqMTY4c3dndE5Yb3A5Iiwia2V5IjoiMTM2OTAyNDM1OC5qcGciLCJtaW1lVHlwZSI6ImltYWdlL2pwZWciLCJ4Om1lc3NhZ2UiOiLov5nmmK_mtYvor5Xmlofku7YiLCJ4OnZhbHVlcyI6IiA1IiwieDp2ZXJzaW9uIjoiMSJ9

upload_ret解码之后

{"bucket":"gypluck","endUser":"wtgame","fname":"1369024358.jpg","fsize":19098,"hash":"FjoerY8driGW9zrj168swgtNXop9","key":"1369024358.jpg","mimeType":"image/jpeg","x:message":"这昩­bú+åy¥¡ù.툋ž˜[Y\Ȏˆˆ
H‹ž™\œÚ[ۈŽˆŒHŸ@

x:message 是乱码

阅读 5.8k
2 个回答

请确认 x:message 的内容是 utf8 编码的

<form action="http://up.qiniu.com" method="post" enctype="multipart/form-data" charset="utf-8" onsubmit="document.charset='utf-8';">

用这个form头试一下。win8下firefox/chrome/IE10测试没问题

以上请忽略

七牛的returnBody是经URLSafeBase64Encode的,decode的时候也要做相应的处理。 再加上sf用markdown导致一些字符被认做了格式,导致误会:

返回的原文应该是:
upload_ret=eyJidWNrZXQiOiJneXBsdWNrIiwiZW5kVXNlciI6Ind0Z2FtZSIsImZuYW1lIjoiMTM2OTAyNDM1OC5qcGciLCJmc2l6ZSI6MTkwOTgsImhhc2giOiJGam9lclk4ZHJpR1c5enJqMTY4c3dndE5Yb3A5Iiwia2V5IjoiMTM2OTAyNDM1OC5qcGciLCJtaW1lVHlwZSI6ImltYWdlL2pwZWciLCJ4Om1lc3NhZ2UiOiLov5nmmK_mtYvor5Xmlofku7YiLCJ4OnZhbHVlcyI6IiA1IiwieDp2ZXJzaW9uIjoiMSJ9

urlsafe_b64decode的结果是: {"bucket":"gypluck","endUser":"wtgame","fname":"1369024358.jpg","fsize":19098,"hash":"FjoerY8driGW9zrj168swgtNXop9","key":"1369024358.jpg","mimeType":"image/jpeg","x:message":"\xe8\xbf\x99\xe6\x98\xaf\xe6\xb5\x8b\xe8\xaf\x95\xe6\x96\x87\xe4\xbb\xb6","x:values":" 5","x:version":"1"}
print出来是: {"bucket":"gypluck","endUser":"wtgame","fname":"1369024358.jpg","fsize":19098,"hash":"FjoerY8driGW9zrj168swgtNXop9","key":"1369024358.jpg","mimeType":"image/jpeg","x:message":"这是测试文件","x:values":" 5","x:version":"1"}

tornado里
ret = self.get_argument('upload_ret')
获得的结果是unicode类型,直接拿来urlsafe_b64decode会报错。因此要:
decoded_ret = urlsafe_b64decode(str(ret))

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进