Base64 PNG в Python для Windows - PullRequest
11 голосов
/ 10 марта 2009

Как вы кодируете изображение PNG в base64, используя python в Windows?

iconfile = open("icon.png")
icondata = iconfile.read()
icondata = base64.b64encode(icondata)

Вышеописанное прекрасно работает в Linux и OSX, но в Windows оно будет кодировать первые несколько символов, а затем сокращаться. Почему это?

Ответы [ 2 ]

26 голосов
/ 10 марта 2009

Открыть файл в двоичном режиме :

open("icon.png", "rb")

Я не очень знаком с Windows, но я думаю, что происходит, что файл содержит символ (0x1A), который Windows интерпретирует как конец файла (по устаревшим причинам) когда он открывается в текстовом режиме. Другая проблема заключается в том, что открытие файла в текстовом режиме (без 'b') в Windows приведет к перезаписи концов строк, что обычно приводит к разрыву двоичных файлов, где эти символы фактически не указывают на конец строки.

9 голосов
/ 11 марта 2009

Чтобы увеличить ответ от Майлза, специально разработаны первые восемь байтов в файле PNG :

  • 89 - первый байт проверяет, что бит 8 не был удален
  • "PNG" - пусть кто-нибудь прочитает, что это Формат PNG
  • 0d 0a - конец строки DOS индикатор, чтобы проверить, был ли DOS-> Unix конвертация
  • 1a - символ конца файла DOS, проверить, что файл был открыт в двоичный режим
  • 0a - Unix символ конца строки, до проверь был ли unix-> DOS преобразование

Ваш код останавливается на 1а, как и было задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...