在python2中字符串分为 unicode 和 str 类型前端
Str To Unicode 使用decode(), 解码
Unicode To Str 使用encode(), 编码
返回数据给前端时须要先将unicode转换为str类型, 事实上, python2 中的 str 就是一串字节(byte), 而网络通讯时, 传输的就是字节. 若是前端须要接收json数据, 须要使用 json.dumps() 将数据转换为json格式进行返回, 当数据是嵌套类型的数据, 内层的数据可能没法直接转换为str类型的数据, 这时可使用eval()函数进行转换, 再使用json.dumps()进行转换为json格式的数据, json 事实上就是一串字符串.python
python2 默认状况下 字符串 的类型是 str 类型, 若是须要获得 unicode 类型的字符串, 须要使用下面的方式进行声明:web
my_str = u"lowmanisbusy" # 在变量前面加上 u
在 python2 中若是没有从新指定字符编码, 定义中文的字符串时, 须要加上 "u", 指明该字符串为 unicode 类型, 指定使用unicode编码对其进行编码保存:json
my_zh_str = u"渣男不但丑" # 在变量前面加上 u
unicode编码: unicode编码为世界上全部字符都分配了一个惟一编号, 为十六进制, 如中文简体汉字 “渣” 的 Unicode编号就是 6E23, 在 python2就是 "\u6e23", 可是unicode仅仅定义了每一个字符的编号,并无定义如何将这个编号进行存储的方式,因此后来出现了utf-8, gbk等编码格式, 它们都是 unicode 的一种实现方式, 仍然使用了unicode 中的惟一编号, 我的对其的简单理解就是在unicode编码的基础之上又定义了对字符的存储方式.网络
在python3中字符串分为 str 和 bytes 两种类型框架
Str To Bytes 使用 encode(), 编码
Bytes To Str 使用 decode(), 解码
这里须要说明的是, python3 中 bytes 类型的字符串, 就至关于 python2 中 str 类型的字符串, python3中没有unicode类型的字符串, 这里其实涉及到默认编码的问题, python3默认字符编码为:utf-8, python2默认字符编码为:ASCII, ASCII码 包含了128个字符, 其中包括全部的英文字符, 阿拉伯数字, 标点符号, 控制符号等, 却没有中文, 中文是象形文字, 须要使用到更多的字节进行组合来表示出每一个汉字, 所以ASCII是没法知足对中文的表示的, 因此 python2中若是没有从新设置字符编码的话,代码中就不容许出现str类型的中文字符串(能够指定为unicode类型), 由于Cpython2解释器没法识别. 至于 ASCII, UNICODE, UTF-8 之间的关系与区别这里就不细说了, 能够自行去了解一下( utf-8编码 是 unicode编码 的一种实现方式, 我的理解能够认为是下面这样一种关系: utf-8 <---> unicode <--->byte, 最终,数据的传输仍然是以二进制的形式一个一个字节进行传输的)
函数
默认状况下,python3中字符串的类型为 str, 在web框架中, 会自动将 str转换成 byte 向前端返回.编码
当须要将某种编码格式的bytes转换另一种编码格式的bytes时须要先按原来的编码格式进行解码成str类型, 再使用新的编码格式转换为bytes类型spa
如: 若存在变量 my_bt, 其为编码格式 gbk 的 bytes, 需将其转换为utf-8的编码格式,须要进行以下的处理:code
my_str = my_bt.decode("gbk") # 解码 my_bt = my_str.encode("utf-8") # 从新编码
由于 python3 中没有 unicode 类型的字符串, 全部在 python3 中使用下面这种方式定义字符串是没有意义的
my_str = u"渣男不但丑"
我的理解, 有何错误,请帮忙指正,多谢!