繁体   English   中英

在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是文件开头的字节序列,指示应读取的顺序多字节编码(UTF-16)-如果您感兴趣,可以阅读有关系统字节序的信息

如果您在Mac / Linux上运行,则应该能够hd your_utf16filehexdump your_utf16file来检查文件中的原始字节。 运行您的代码,我在我的开头看到了正确的字节0xff 0xfe。

尝试将您的fileread函数部分替换为

    with codecs.open(path, mode='r', encoding=encmode) as fp:
        for block in fp:
            print block

以确保您在消除外部因素(您的read_in_chunks功能)之后仍然可以读取文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM