在Python中将Unicode写入二进制文件
我想知道怎么把unicode(utf-8)写入一个二进制文件。背景是这样的:我有一个40字节的头部(10个整数),还有一个包含可变数量的三整数结构的表。写这些东西很简单。
现在,我想在文件的末尾添加一堆字符串。
写普通的ASCII字符串很简单:
value = ('ab')
s = struct.Struct('2s')
packed_data = s.pack(value)
我从将字符串解释为打包的二进制数据这个文档中学会了怎么做。
但是,有没有办法做到unicode(utf-8)字符串的写入呢?
有没有什么想法?有人做过这个吗?
2 个回答
2
unicode.encode('utf-8') 会把文本转换成用UTF-8编码的字节串;在打包之前,先检查一下长度就可以了。
6
Unicode和UTF-8不是一回事。UTF-8是Unicode的一种二进制编码方式,所以你可以像写ASCII字符串一样写UTF-8字符串。也不需要把编码后的字符串打包,因为它本身就是“只是一堆字节”。
# coding: utf8
import struct
text = u'我是美国人。'
encoded_text = text.encode('utf8')
# proof packing is redundant...
format = '{0}s'.format(len(encoded_text))
packed_text = struct.pack(format,encoded_text)
print encoded_text == packed_text # result: True
所以,只需要把你的Unicode字符串编码后,写在文件中你打包的整数后面就可以了。