【发布时间】:2017-11-02 04:12:48
【问题描述】:
我不应该期望这里有任何错误。我只想按字面意思获取字符串并将其转换为字节。我不想编码或解码任何东西。
我在这里举一个愚蠢的例子:
>>> astring
u'\xb0'
傻到让我头疼……
>>> bytes(astring)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position...
一个可怕的技巧是这样做:
>>> bytes(repr(astring)[2:-1])
'\xb0'
另一个不好的解决方案是:
>>> bytes(astring.encode("utf-8"))
'\xc2\xb0'
这是一个糟糕的解决方案,因为我的字符串不是由两个字符组成的。这是错误的。
另一个糟糕的解决方案是:
>>> bytes(''.join(map(bytes, [chr(ord(c)) for c in astring])))
'\xb0'
我正在使用 Python 2.7
背景
我想比较数据库中编码未知且有时相互冲突的两列。我不在乎我的转储上的错误字符。我只是想让它看看它。
【问题讨论】:
-
您应该始终提及您用于 Unicode 问题的 Python 版本。你是什么意思“把它翻译成它的字节”? Unicode 字符串是代码点序列,而不是字节序列。如果你想要字节,那么你需要执行编码。
-
如果我将一个字符串加载到内存中,它就是一个原始二进制数据序列。无论内容如何,我都应该能够随时将其转储为字节。
-
但是Unicode字符串不是字节串!当然,在硬件层面,一切都是字节(嗯,真的是机器字,但我们不要分心;)),但是将 Unicode 字符串视为字节字符串是没有用的。在 Python 3 中,字节和文本之间的区别更加清晰,而在 Python 2 中则不太清楚,这可能导致各种形式的混淆。
-
我怀疑您可以通过将 Unicode 数据编码为 Latin1 来获得所需的字节。
u'\xb0'.encode('latin1')可以工作(在 Python 2 和 3 中),但我不能保证它会对 Unicode 字符串中可能存在的其他数据执行您想要的操作。
标签: python string python-2.7 unicode