我想知道如何将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)的字符串执行此操作?
有什么想法吗?有人曾经这样做过吗?
答案 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编码的字节字符串;只需检查包装前的长度。