zoukankan      html  css  js  c++  java
  • unicode和utf-8的区别

    在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")

  • 相关阅读:
    Amazon后台登陆以及跟卖
    python图像识别--验证码
    python selenium下载电子书
    Amazon后台模拟登陆
    python简单粗暴多进程之concurrent.futures
    SmartDo数据挖掘思路
    python3倒叙字符串
    Effective C++ —— 构造/析构/赋值运算(二)
    Effective C++ —— 让自己习惯C++(一)
    cocos2dx-3.x物理引擎Box2D介绍
  • 原文地址:https://www.cnblogs.com/xin-qing3/p/10917017.html
Copyright © 2011-2022 走看看