python中utf-16的文件写入和文件读取

python中utf-16的文件写入和文件读取,python,python-2.7,codec,Python,Python 2.7,Codec,我有这个文件写入功能: 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

我有这个文件写入功能:

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是文件开头的一个字节序列,指示应该读取哪个顺序的多字节编码(UTF-16)——如果您感兴趣,可以阅读

如果您在mac/linux上运行,您应该能够
hd\u utf16文件
hextdump\u utf16文件
,以检查文件中的原始字节。运行代码时,我在开头看到了正确的字节0xff 0xfe

尝试将
fileread
功能部分替换为

    with codecs.open(path, mode='r', encoding=encmode) as fp:
        for block in fp:
            print block
确保消除外部因素后仍能读取文件(您的
readin_chunks
功能正常)。

Am在x64机器(Windows 8.1)上运行。也尝试删除
read\u块中的
。由于某种原因,无法使其工作。是否是
编解码器。以fp:
引发该异常的方式打开(path,mode='r',encoding=encmode)?确保将
raise ex
替换为just
raise
,否则它会掩盖异常开始的真实位置。