在Python中将unicode写入二进制文件

时间:2010-12-28 00:55:47

标签: python unicode file-io

我想知道如何将unicode(utf-8)写入二进制文件。这是背景:我有一个40字节的标题(10个整数),以及一个包含可变数量的三元组结构的表。写这些是蛋糕。

现在,我想在文件的末尾添加一堆字符串。

编写常规的基于ASCII的字符串很简单:

value = ('ab')
s = struct.Struct('2s')
packed_data = s.pack(value)

我从Interpret strings as packed binary data学会了如何做到这一点。

但是有没有办法为基于unicode(utf-8)的字符串执行此操作?

有什么想法吗?有人曾经这样做过吗?

2 个答案:

答案 0 :(得分:4)

Unicode!= UTF-8。 UTF-8是Unicode的二进制编码,因此只需编写UTF-8字符串就像使用ASCII字符串一样。无需打包编码的字符串。它已经“只是一堆字节”。

# 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字符串,然后在编写压缩的整数后将它们附加到文件中。

答案 1 :(得分:2)

unicode.encode('utf-8')将返回以UTF-8编码的字节字符串;只需检查包装前的长度。