Подтвердить что ты не робот

Base64 png в python в Windows

Как вы кодируете png-изображение в base64 с помощью python в Windows?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ваш код останавливается на 1a, как это предусмотрено.