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

2 投票
2 回答
8900 浏览
提问于 2025-04-16 09:06

我想知道怎么把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字符串编码后,写在文件中你打包的整数后面就可以了。

撰写回答