Django中文无法转换成latin-1编码的解决方案
2015-11-30 22:35
561 查看
在Ubuntu上用Django做Web开发的时候遇到了中文保存到Cookie无法解析的问题,经过了下面几个步骤终于把问题解决了:
修改/usr/lib/python3.4/wsgiref/headers.py文件,强制使用UTF-8编码
对存入Cookie的值进行编码,将字符串转换成字节数组
在页面加载的时候对需要读取的Cookie值使用Javascript进行解码
以下是具体操作步骤:
改成:
经过这个操作,本地运行manager.py runserver的时候已经可以正常记录Cookie了。但是直接部署到Apache的时候,只要涉及到保存中文Cookie的时候就会返回500的错误。Apache log中会显示如下错误信息:
然后第二步操作,解决网页打开的问题。
这一步完成,保存cookie的问题就解决了,打开网页的时候就可以从服务器接收到正常内容了。
然后继续第三步,解决Cookie中乱码的问题。
OK!到了这里中文Cookie的问题就都解决了。:-)
修改/usr/lib/python3.4/wsgiref/headers.py文件,强制使用UTF-8编码
对存入Cookie的值进行编码,将字符串转换成字节数组
在页面加载的时候对需要读取的Cookie值使用Javascript进行解码
以下是具体操作步骤:
修改/usr/lib/python3.4/wsgiref/headers.py文件,强制使用UTF-8编码
找到headers.py -> 打开文件 -> 对如下内容进行修改:def __bytes__(self): return str(self).encode('iso-8859-1')
改成:
def __bytes__(self): return str(self).encode('utf-8')
经过这个操作,本地运行manager.py runserver的时候已经可以正常记录Cookie了。但是直接部署到Apache的时候,只要涉及到保存中文Cookie的时候就会返回500的错误。Apache log中会显示如下错误信息:
...mod_wsgi (pid=5603): Exception occurred processing WSGI script '/.../wsgi.py'. ...TypeError: header value contained non 'latin-1' characters
然后第二步操作,解决网页打开的问题。
对存入Cookie的值进行编码,将字符串转换成字节数组
在Django中需要设置Cookie的地方进行如下编码转换:def setCookies(response, key, queryCollection): if key in queryCollection: response.set_cookie(key.lower(), bytes(queryCollection[key], 'utf-8').decode("ISO-8859-1")) else: response.set_cookie(key.lower(), "")
这一步完成,保存cookie的问题就解决了,打开网页的时候就可以从服务器接收到正常内容了。
然后继续第三步,解决Cookie中乱码的问题。
在页面加载的时候对需要读取的Cookie值使用Javascript进行解码
在对应的Javascript代码中进行如下转换:function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return decodeURIComponent(escape(c.substring(nameEQ.length,c.length).replace(/"/g, ""))); } return null; }
OK!到了这里中文Cookie的问题就都解决了。:-)
相关文章推荐
- 蓝桥杯 ALGO-124 算法训练 数字三角形 的两种算法
- Windows 平台安装配置Golang语言环境
- Django第一次接触
- pedagogical
- 【django】搭建博客教程(4)——超级简单实现滚动回到页面顶端按钮
- 让Category支持添加属性与成员变量【转载】
- <18> go time
- googletest 学习笔记
- Django学习记录之Django 1.8 教程(我只是官网的搬运工)Tutorial Part 2
- Gof-23种设计模式名称列表
- Django学习记录之Django 1.8 教程(我只是官网的搬运工)Tutorial Part 1
- Mongo数据迁移-单个collection的迁移
- Mongo解决注册码到期的问题
- Google Tensorflow 源码编译(三):tensorflow<v0.5.0>
- 解决启动mongod 时,出现addr already in use错误
- FMDB&EGODatabase(数据持久化)
- django1.6.11配置静态文件
- Golang学习摘录(二)
- 民意调查Django实现(二)
- django数据源操作(多数据源,导入导出等)