python - 为什么python2中'1' == u'1'的结果是True?
问题描述
我在 Linux 中使用 python2.7。来自https://docs.python.org/2/howto/unicode.html。我发现 python 对 中的每个字母使用一个字节str
,而在 Unicode 字符串中使用 4 个字节。那么为什么我True
在输入后得到'1' == u'1'
。
python2中的类似事实:
In [1]: a = {}
In [2]: a['1'] = 1
In [3]: a[u'1']
Out[3]: 1
解决方案
UTF-8 能够使用一到四个一字节(8 位)代码单元对 Unicode 中的所有 1,112,064 个有效字符代码点进行编码。具有较低数值的代码点往往更频繁地出现,使用较少的字节进行编码。它旨在向后兼容 ASCII:Unicode 的前 128 个字符,与 ASCII 一对一对应,使用与 ASCII 具有相同二进制值的单个字节进行编码,因此有效的 ASCII 文本是有效的 UTF-8 -编码的Unicode也是如此。
你可以看到一个这样的例子:
>>> a = u'1'
>>> a.encode('utf-8')
'1'
>>> b = u'ツ'
>>> b.encode('utf-8')
'\xe3\x83\x84'
推荐阅读
- html - 在 Angular 4 中的组件之间导航
- java - 如何解密在 Obj-c 中加密的 Java 数据
- php - 准备好的语句总是返回 false
- c# - GTK 中的 MessageBox 从未显示
- animation - 如何导出/保存用 plotly 制作的动画气泡图?
- javascript - 使用 react-select 设置默认值不起作用
- reactjs - branch.io deeplink 有时不会重定向到 iOS 上的 Messenger 上的 Appstore
- reactjs - 尝试创建一个切换功能以根据附加到第三个按钮的 onClick 事件将 2 个按钮的状态从禁用设置为启用
- google-chrome - 转换为 pdf 时 chrome 中标题上方的空白高度
- java - Firebase createUserWithEmailAndPassword task.isSuccessful()