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。
其次,中字符串类型分为byte string 和 unicode string两种。
如果在⽂件中指定编码⽅式为utf-8(#coding=utf-8),那么所有带中⽂的字符串都会被认为是utf-8编码的byte string(例如:mystr="你好"),但是在函数中所产⽣的字符串则被认为是unicode string。
问题就出在这边,unicode string 和 byte string 是不可以混合使⽤的,⼀旦混合使⽤了,就会产⽣这样的错误。例如:
其中,"你好"被认为是byte string,⽽("argu")的返回值被认为是unicode string。由于预设的解码器是ascii,所以就不能识别中⽂byte string。然后就报错了。
以下有两个解决⽅法:
unicode字符转中文1.将字符串全都转成byte string。
2.将字符串全都转成unicode string。
byte string转换成unicode string可以这样转unicode(unicodestring, "utf-8")
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论