变量中与b'string'等价的是什么?

4

在使用字符串之前,我需要对其进行编码,但唯一的问题是这是一个变量,而且我只知道通常情况下我会使用b'string'。

我猜应该使用variable.encode(),但应该使用哪种编码呢?

编辑:抱歉,我误解了问题,Christian的答案帮助我意识到了问题所在。感谢所有人的帮助。


你正在使用Python 2.7还是Python 3.+? - agconti
抱歉,我忘了提到。我正在使用2.7版本。 - diodepain
你是否担心将你的脚本移植到Python 3? - agconti
不太担心将其移植到Python 3。 - diodepain
2个回答

3

你需要决定使用哪种编码方式。你可以选择UTF-8作为合理的默认值,也可以从环境中推断出编码方式。

环境可能包括:

然后,您可以通过var.encode(encoding)将Unicode变量转换为字节字符串。

还可以查看Python Unicode HOWTO


哦,谢谢,我完全误解了我的问题,这个解决了它。我会尽快将其标记为已接受的答案。 - diodepain

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'为前缀; 它们生成bytes类型的实例而不是str类型。 它们只能包含ASCII字符; 具有128或更大数值的字节必须用转义表示。

Flask错误是因为字符串未以UTF-8编码引起的问题。

像这样进行编码:

your_string = your_string.encode('utf8') 

若想了解更多相关细节,请查看已报告的Github问题这里


这很奇怪,因为我的Flask应用程序出现了严重问题。当我尝试在字符串前面不加b使用bcrypt时,会出现500服务器错误。显然,当对用户输入使用bcrypt时,这会给我带来问题。在Flask中出现的错误是“TypeError:Unicode对象必须在哈希之前进行编码”。 - diodepain
@Zaphod Flask期望其参数为utf-8编码,请参考我的更新答案。 - agconti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接