2015-10-14 6 views
0

У меня строка Unicode - под Python 2.7.кодировка строки юникода для сжатия lzma

У меня также есть головная боль сегодня - настоящая, которая не была вызвана Unicode - и не может сосредоточиться на проблеме столько, сколько мне нужно. Я более бессмыслен, чем мыслитель, до тех пор, пока количество пыльцы не упадет.

Мне нужно сжать мою строку, используя backports.lzma. Иногда я получаю сообщение об ошибке, потому что «строка» не является ASCII-совместимым String, а объектом Unicode, который использует некоторые неизвестные в настоящее время набор символов (вероятно, UTF-8, но без гарантии). lzma.compress хочет String или bytes() совместимый объект.

Я не обязательно кодирую кодировку Юникода в этой точке моего кода. Я просто знаю, что это объект unicode. Обычно в подобной ситуации я знаю кодировку и могу действовать соответствующим образом. Я также обычно не забочусь о том, чтобы потерять одного или двух символов в перекодировке. На этот раз мне все равно.

Это приводит меня несколько вопросов:

• Существует ли безопасное кодирование, чтобы выбрать то, что будет также несколько минимальным размером (для большинства UTF-8 Docs)?

• Нужно ли беспокоиться о обратной совместимости при декодировании и предыдущих сжатых документах? Я не полностью читал документы lzma (мой плохой) и не понимал, что ему нужен String.

ответ

1

Сжатие работает с байтами, а не с текстом, поэтому естественно требуется объект str (2.x) или bytes (3.x). Вам не нужно заботиться о том, что такое внутреннее текстовое представление, так как вы будете кодировать/декодировать текст самостоятельно.

  • Есть ли безопасное кодирование, чтобы выбрать то, что будет также несколько минимальным размером (для большинства UTF-8 Docs)?

Nope. Просто кодируйте как UTF-8 и сделайте с ним.

  • мне нужно беспокоиться о совместимости при декодировании по сравнению с более ранними документами я сжатыми ли? Я не полностью читал lzma docs (мой плохой) и не понимал, что ему нужна строка.

Если вы только сжатый ASCII текст, то вы можете расшифровать, как UTF-8 без вопроса, так как UTF-8 и ASCII кодирование текста ASCII точно таким же образом.

+0

Спасибо. Я знал, что UTF8 расшифровывает ASCII, но беспокоился, если мне нужно было выбрать какую-то другую кодировку, чтобы все прошло. Кстати, краткость ваших ответов невероятно совершенна. –

+0

Все кодировки UTF могут кодировать все символы Юникода, по определению. UTF-8 является наименее расточительным, когда дело доходит до кодирования текста ASCII. –

Смежные вопросы