Skip to main content
 首页 » 编程设计

python之StringIO 和 pystache 生成虚假的空字节

2025年05月04日12daizhj

我正在将一个 mustache 文件解析为一个字符串,之后我想使用 csv 模块处理该字符串。为此,我使用 StringIO 生成了一个类似于字符串接口(interface)的文件。 csv 模块提示:

_csv.Error: line contains NULL byte 

所以我做了一个简单的测试:

import pystache 
from cStringIO import StringIO 
 
txt = pystache.render('Hello {{name}}', {'name' : 'Steve'}) 
f = StringIO(txt) 
data = f.read() 
print txt.find('\x00') 
print data.find('\x00') 
print txt.count('\x00') 
print data.count('\x00') 

产生:

-1 
1 
0 
33 

StringIO 对象以某种方式插入了 NULL 字节。如果我使用未使用 pystache 预处理的字符串,则不会发生这种情况:

from cStringIO import StringIO 
 
txt = "Hello Steve" 
f = StringIO(txt) 
data = f.read() 
print txt.find('\x00') 
print data.find('\x00') 
print txt.count('\x00') 
print data.count('\x00') 

结果符合预期:

-1 
-1 
0 
0 

可能是什么问题?

请您参考如下方法:

txt = "Hello Steve" 是bytestring,预处理后的字符串可以是unicode字符串吗?