我有一个似乎有很多空格的字符串(实际上在每个符号之间我看到一个空格)。为了清楚起见,这是字符串:
{ " d a t a " : { " i d " : " 1 0 b a 8 7 3 8 - b 0 0 9 - 4 1 2 0 - 9 e c 1 - 4 1 7 a 6 e a 1 a 6 1 f " , " t i m e " : 1 4 4 5 2 6 0 9 8 6 7 5 2 } , " e x p i r e s " : 1 4 5 3 0 9 6 7 8 6 7 5 2 }
我尝试以我一直以来的方式删除空格:
z = z.replace(" ","")
但它不起作用。例如这段代码:
print type(z), len(z)
z = z.replace(" ","")
print type(z), len(z)
打印以下内容:
<type 'str'> 198
<type 'str'> 198
因此,删除空格后,字符串的长度与之前相同。除此之外,我将新字符串(应该删除空格的地方)保存到文本文件中。当我用文本编辑器打开这个文件时,我确实看到了空格!如果我尝试使用文本编辑器删除它们(使用搜索和替换),则会将其删除。
所以,我的问题是为什么Python无法删除这些“特殊”空格以及如何删除它们?
答案 0 :(得分:2)
由于您在上次评论中说ord(c)
为此字符返回0,因此您可以稍微更改代码并删除此特定的空字符:
z = z.replace(chr(0), "")
现在它不应该包含任何&#34;空格&#34;:
print z
>> {"data":{"id":"10ba8738-b009-4120-9ec1-417a6ea1a61f","time":1445260986752},"expires":1453096786752}
编辑:
这里还有一个指向ASCII表的链接,您可以在其中看到它是空字符:
答案 1 :(得分:2)
我已经厌倦了使用ord(c)而我得到的0代表我已被解释为空格。
表示输入数据为utf-16文本。如果零字节跟随似乎是ascii字符,例如b'a\0'
,那么它是'utf-16le'
(little-endian):
>>> b'd\0a\0t\0a\0'.decode('utf-16le')
u'data'
不要使用.replace(b'\0', b'')
;它会破坏第一个非ascii字符,例如b'\xac '
(使用utf-16le字符编码编码的欧元符号)。