在Django视图函数中经常出现类似于'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)的错误。

在解决错误之前,首先要了解unicode和utf-8的区别。
        unicode指的是万国码,是一种“字码表”。而utf-8是这种字码表储存的编码方法。unicode不一定要由utf-8这种方式编成bytecode储存,也可以使用utf-16,utf-7等其他方式。目前大多都以utf-8的方式来变成bytecode。

其次,python中字符串类型分为byte string 和 unicode string两种。
        如果在python文件中指定编码方式为utf-8(#coding=utf-8),那么所有带中文的字符串都会被认为是utf-8编码的byte string(例如:mystr="你好"),但是在函数中所产生的字符串则被认为是unicode string。
        问题就出在这边,unicode string 和 byte string 是不可以混合使用的,一旦混合使用了,就会产生这样的错误。例如:
        self.response.out.write("你好"+self.request.get("argu"))
        其中,"你好"被认为是byte string,而self.request.get("argu")的返回值被认为是unicode string。由于预设的解码器是ascii,所以就不能识别中文byte string。然后就报错了。


以下有两个解决方法:
        1.将字符串全都转成byte string。
            self.response.out.write("你好"+self.request.get("argu").encode("utf-8"))
        2.将字符串全都转成unicode string。
            self.response.out.write(u"你好"+self.request.get("argu"))
            byte string转换成unicode string可以这样转unicode(unicodestring, "utf-8")

最新文章

  1. [diango]批量导入不重复数据
  2. npm 安装远程包(github的)
  3. HBase基础和伪分布式安装配置
  4. WAC集中转发部署
  5. [转载] Python的GIL是什么鬼,多线程性能究竟如何
  6. ExtJS登陆页面涉及到的几个问题
  7. tomcat集群 (自带Cluster集群)
  8. js验证
  9. iOS开发之自定义控制器切换
  10. bash shell学习-正则表达式基础 (笔记)
  11. 网页制作之html基础学习2-标签
  12. 使用SpringSecurity3用户验证(异常信息,验证码)
  13. spring + hibernate 添加用户
  14. HDOJ2005-第几天?
  15. 【cogs 597】【dp】交错匹配
  16. Halcon一日一练:创建三通道图像
  17. acdrem1083 人民城管爱人民 DP
  18. Ditto在教学上的应用
  19. iOS中CocoaPods的安装及错误详解
  20. Install Oracle Tuxedo in silent mode

热门文章

  1. My advice to young people - Donald Knuth [video]
  2. jquery.mmenu
  3. controller 和 指令 通讯方法
  4. 用Delphi的TIdHttp控件发起POST请求和Java的Servlet响应
  5. Decimal
  6. Codeforce 220 div2
  7. hsql使用架构包启动数据库
  8. maven install 报错Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin
  9. shell脚本一条命令直接发送http请求(xjl456852原创)
  10. swing入门例子