我使用python-memcached库从memcached检索另一个应用程序设置的值。但不幸的是,这就是我得到的值:
>>> mc.get("key")
'\x04\x08"\nHello'有没有可能使用python函数将这种混合的ASCII代码解析成纯字符串?
非常感谢你的帮助
发布于 2010-12-06 18:45:41
It is a "plain string",只要有这样的东西存在。我不知道你想要什么样的输出,但是:
没有纯文本这回事。
Python2.x中的str类型实际上是字节的容器,而不是字符的容器。因此,它首先不是真正的文本:)它采用非常简单的编码来显示字节,使用转义序列来表示甚至有点“奇怪”的每个字节。如果您print字符串,它的格式将再次不同(您现在看到的是用于在代码中创建这样的文字字符串的语法)。
在更简单的时候,我们天真地假设我们可以将字节映射到这些我们称为“字符”的符号,就是这样。然后事实证明,人们想要使用的不同映射大约有无数种,其中许多映射需要比一个字节所能表示的符号更多的符号。这就是为什么我们现在有了Unicode :它代表了你可以想象到的任何真实语言所需要的每一个符号(还有几个用于伪语言和其他目的),它抽象地给这些符号赋值,但没有说明如何收集字节并将其解释为数字。(这就是编码的目的)。
如果您知道字符串数据是以特定方式编码的,则可以将其解码为Unicode字符串。它可以是实际Unicode数据的编码,也可以是某种其他格式(例如,日语文本通常以称为"Shift-JIS“的形式出现,因为它对它们的意义与"Latin-1”- ASCII的常见扩展-对我们的意义大致相同)。无论采用哪种方法,您都会得到一系列Unicode代码点(上一段中提到的数字)的内存表示形式。实际上,这是真正的“文本”,但并不是真正的“简单”:)
但看起来你拥有的数据实际上是一个二进制的字节团块,如果解释为ASCII码,主要由“可读文本”组成。
您真正需要做的是找出为什么第一个字节的值为4,下一个字节的值为8,并相应地进行处理。
发布于 2010-12-06 18:42:50
如果你只需要修剪'\x04\x08"\n',并且它总是一样的(你没有很清楚地表达你的问题,我不确定这是什么或者你想要什么),可以这样做:
to_trim = '\x04\x08"\n'
string = mc.get('key')
if string.startswith(to_trim):
string = string[len(to_trim):]https://stackoverflow.com/questions/4365456
复制相似问题