如何编写Python2与Python3兼容的Unicode字符串赋值语句?
兼容Python 2和3的Unicode字符赋值写法
当然有啦!最简洁且优雅的解决方案是利用Python 2的__future__模块导入unicode_literals,这样就能让两种版本的字符串字面量行为统一,不用再区分'̀'和u'̀'。
方法一:使用unicode_literals导入(推荐)
在代码开头添加这行导入后,Python 2里所有不带前缀的字符串字面量都会被当作unicode类型(和Python 3的str类型等价),完美兼容你的需求:
from __future__ import unicode_literals s = '̀' # 这个写法在Python 2和3中都会生成单独的Unicode字符
这个导入的核心作用是改变Python 2默认的字符串类型规则,让它和Python 3对齐,彻底避免版本判断的繁琐代码。
方法二:版本判断的兼容写法
如果不想修改全局的字符串行为,也可以通过版本判断来实现兼容,写法稍显繁琐但也有效:
import sys # 多行写法 if sys.version_info >= (3, 0): s = '̀' else: s = u'̀' # 或者一行简洁写法 s = '̀' if sys.version_info >= (3, 0) else u'̀'
补充说明
你遇到的问题本质是Python 2和3的字符串模型差异:
- Python 3中默认的
str类型就是Unicode字符串,所以直接写'̀'会被解析为单个Unicode字符。 - Python 2中默认的
str是字节串,不带u前缀的'̀'会被当作UTF-8编码的字节序列(而非单个Unicode字符),必须用u'̀'才能显式声明为Unicode字符串。
内容的提问来源于stack exchange,提问作者Paolo Benvenuto
相关产品推荐
相关产品推荐

