запись Unicode в двоичный файл в Python - PullRequest
2 голосов
/ 28 декабря 2010

Мне интересно, как записать Unicode (UTF-8) в двоичный файл.Вот предыстория: у меня есть 40-байтовый заголовок (10 дюймов) и таблица с переменным числом структур triple-int.Написание этих было торт.

Теперь я хочу добавить несколько строк в конец файла.

Написание обычных строк на основе ASCII легко:

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

Я узнал, как это сделать из Интерпретировать строки как упакованные двоичные данные .

Но есть ли способ сделать это для строк на основе Unicode (UTF-8)?

Есть идеи?Кто-нибудь делал это раньше?

Ответы [ 2 ]

5 голосов
/ 28 декабря 2010

Юникод! = 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 и добавьте их в файл после записи ваших упакованных целых.

2 голосов
/ 28 декабря 2010

unicode.encode ('utf-8') вернет строку байтов, закодированную в UTF-8; просто проверьте длину перед упаковкой.

...