python 中的 utf-16 文件写入和文件读取
File write and file read in utf-16 in python
我有这个文件写入功能:
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)
它正在用来将数据写入文件:
filewrite(folderpath, filename, strdata, 'utf-16')
但是,如果尝试读取此文件时出现异常:
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 是文件开头的字节序列,指示应读取 multi-byte 编码 (UTF-16) 的顺序 - 如果您有兴趣,可以阅读 system endianness .
如果您 运行 在 mac/linux 上,您应该能够 hd your_utf16file
或 hexdump your_utf16file
检查文件中的原始字节。 运行 你的代码我在我的开头看到了正确的字节 0xff 0xfe。
尝试用
替换您的 fileread
函数部分
with codecs.open(path, mode='r', encoding=encmode) as fp:
for block in fp:
print block
以确保您在排除外部因素后仍然可以读取文件(您的 read_in_chunks
功能正常)。
我有这个文件写入功能:
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)
它正在用来将数据写入文件:
filewrite(folderpath, filename, strdata, 'utf-16')
但是,如果尝试读取此文件时出现异常:
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 是文件开头的字节序列,指示应读取 multi-byte 编码 (UTF-16) 的顺序 - 如果您有兴趣,可以阅读 system endianness .
如果您 运行 在 mac/linux 上,您应该能够 hd your_utf16file
或 hexdump your_utf16file
检查文件中的原始字节。 运行 你的代码我在我的开头看到了正确的字节 0xff 0xfe。
尝试用
替换您的fileread
函数部分
with codecs.open(path, mode='r', encoding=encmode) as fp:
for block in fp:
print block
以确保您在排除外部因素后仍然可以读取文件(您的 read_in_chunks
功能正常)。