我有这个文件写入功能:
def filewrite(folderpath, filename, strdata, encmode):
try:
path = os.path.join(folderpath, filename)
if not path:
return
create_dir_path(folderpath)
#path = os.path.join(folderpath, filepath)
with codecs.open(path, mode='w', encoding=encmode) as fp:
fp.write(unicode(strdata))
except Exception, e:
raise Exception(e)
用于将数据写入文件:
^{pr2}$但是,如果尝试读取此文件,则会出现异常:
Exception: UTF-16 stream does not start with BOM
我的文件读取功能如下:
def read_in_chunks(file_object, chunk_size=4096):
try:
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
except Exception, ex:
raise ex
def fileread(folderPath, fileName, encmode):
try:
path = os.path.join(folderPath, fileName)
fileData = ''
if os.access(path, os.R_OK):
with codecs.open(path, mode='r', encoding=encmode) as fp:
for block in read_in_chunks(fp):
fileData = fileData + block
return fileData
return ''
except Exception, ex:
raise ex
请告诉我这里哪里做错了。在
谢谢
你的代码似乎没有什么问题。在我的机器上运行它会自动在文件的开头创建正确的BOM。在
BOM是文件开头的一个字节序列,它指示应该读取哪个顺序的多字节编码(UTF-16)——如果您感兴趣,可以阅读system endianness。在
如果您在mac/linux上运行,您应该能够}来检查文件中的原始字节。在运行代码时,我在开头看到了正确的字节0xff 0xfe。在
hd your_utf16file
或{尝试将
fileread
函数部分替换为以确保在消除外部因素(您的
read_in_chunks
功能)后仍然可以读取该文件。在相关问题 更多 >
编程相关推荐