博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unicode vs uft8
阅读量:5963 次
发布时间:2019-06-19

本文共 1626 字,大约阅读时间需要 5 分钟。

hot3.png

使用的环境

  • python2.7.3
  • ipython

背景

unicode 和 utf8完全是两个东西 unicode简单地讲就是一个数值 每个值都对应了一张巨大无比的表上的一个值 比如 '\u6211' 这个玩意儿6211对应的值就是

uft8 utf16 utfXXX都是编码的规范 我们可以把unicode编码成uft8的字符串 所以在把unicode专程utf8的是否 调用的方法为 encode(utf8) decode则是把utf8字符串解码成unicode形式

那么python中的一些常见的例子就可以很清楚地解释了:

In [1]: a = '我'In [2]: aOut[2]: '\xe6\x88\x91'  # 已经是uft8了 这个应该和你用的terminal有关In [3]: a.decode('utf8') # 解码成unicodeOut[3]: u'\u6211'

场景

前几天写了一个测试用例 主要是用来测试现在的Model在存取MongoDB时 是否正常 期间遇到了一些unicode的坑 测试出问题的地方在:

a = '我'b = u'我'assertEqual(a, b) # Falsec = 'c'd = u'c'assertEqual(c, d) # True

把a存进Mongodb是正常的 但是把a取出来 也就是这里的b 再和之前的a对比就会出错了 错误提示

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode

由于之前都是直接去存取MongoDB 没有注意到这里的差别 翻看了MongoDB的文档后 发现了下面这段:

You probably noticed that the regular Python strings we stored earlier look different when retrieved from the server (e.g. u’Mike’ instead of ‘Mike’). A short explanation is in order.

MongoDB stores data in BSON format. BSON strings are UTF-8 encoded so PyMongo must ensure that any strings it stores contain only valid UTF-8 data. Regular strings (<type ‘str’>) are validated and stored unaltered. Unicode strings (<type ‘unicode’>) are encoded UTF-8 first. The reason our example string is represented in the Python shell as u’Mike’ instead of ‘Mike’ is that PyMongo decodes each BSON string to a Python unicode string, not a regular str.

原来如此 取出来的都是unicode

后话

我在这个testcase里面比较的是两个大的字典 里面有中文 引文 草泥马文 对比从MongDB里面去除来的数据 岂不是要每个字段都去encode? 崩溃 不过这里有个比较取巧的方法 就是用 json dumps

self.data = json.loads(json.dumps(self.data)) # 出来就是unicode了 爽的

转载于:https://my.oschina.net/pengfeix/blog/149403

你可能感兴趣的文章
linux系统增加swap容量的方法
查看>>
远程推送
查看>>
后台调用gps
查看>>
HTML5标签的语义认知和理解(1)
查看>>
MySQL日志功能详解(2)
查看>>
HP LaserJet 305X 和 339X 系列一体机如何设置手动或自动接收传真?
查看>>
linux之权限之隐藏权限
查看>>
设计模式学习网址和书籍
查看>>
[李景山php]每天TP5-20170115|thinkphp5-Model.php-8
查看>>
前端seo注意事项!
查看>>
ConcurrentHashMap 线程安全
查看>>
Centos6.5 Python2.7+Supervisor 环境安装
查看>>
Exchange2010SP1删除特定主题邮件
查看>>
Supporting Python 3(支持python3)——语言区别和暂时解决方法
查看>>
Linux 下网络性能优化方法简析
查看>>
ejs教程
查看>>
查询某个命令需要用yum安装哪个包才有
查看>>
网络协议
查看>>
Storm环境搭建
查看>>
我的友情链接
查看>>