变量中 b'string' 的等效是什么?
我需要在使用一段文本之前对它进行编码,但唯一的问题是这段文本是一个变量,我只知道通常我会用 b'string' 这种方式。我想我应该用 variable.encode(),但是我该用什么编码方式呢?
补充说明:抱歉,我之前误解了问题,Christian 的回答让我明白了发生了什么。感谢大家的帮助。
2 个回答
1
在 Python 2.7 中,你不需要对像 b'string'
这样的变量做任何处理,因为它会被忽略。在 Python 3.3 中,它用于将字符串编码为字节。
我从 NPE 的一篇精彩回答中学到了这一点,里面详细解释了这个问题:
引用一下Python 2.x 的文档:
在 Python 2 中,前缀 'b' 或 'B' 会被忽略;它表示这个字面量在 Python 3 中应该变成字节字面量(例如,当代码通过 2to3 自动转换时)。'u' 或 'b' 前缀后面可以跟 'r' 前缀。
而Python 3.3 的文档则说明:
字节字面量总是以 'b' 或 'B' 开头;它们生成的是字节类型的实例,而不是字符串类型的实例。字节字面量只能包含 ASCII 字符;数值为 128 或更大的字节必须用转义字符表示。
Flask 错误是因为字符串没有用 UTF-8 编码导致的。
你可以这样编码:
your_string = your_string.encode('utf8')
关于这个问题的更多细节,可以查看在 GitHub 上报告的这个问题这里。
3
首先,你需要决定使用哪种编码方式。你可以选择UTF-8作为一个比较合理的默认选项,或者根据环境来推测编码。
这里的环境可以是,比如:
- HTTP连接中的Content-Type头信息
- UNIX系统上的LANG/LC_CTYPE变量
sys.getfilesystemencoding()
这个函数
然后,你可以通过var.encode(encoding)
把你的Unicode变量转换成字节字符串。
还可以看看Python Unicode使用指南。