문제

Windows의 Python을 사용하여 PNG 이미지를 Base64로 어떻게 인코딩합니까?

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

위는 Linux와 OSX에서 잘 작동하지만 Windows에서는 처음 몇 문자를 인코딩 한 다음 짧게 자릅니다. 왜 이런거야?

도움이 되었습니까?

해결책

이진 모드에서 파일을 엽니 다:

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

나는 Windows에 익숙하지 않지만 무슨 일이 일어나고 있는지 상상할 것입니다. 파일에 문자 (0x1a)가 포함되어 있다는 것입니다. Windows는 파일의 끝으로 해석됩니다 (레거시 이유로) 텍스트 모드에서 열 때. 다른 문제는 Windows에서 'B'가없는 텍스트 모드에서 파일을 열면 라인 엔드가 다시 작성되며, 이는 일반적으로 해당 문자가 실제로 줄의 끝을 표시하지 않는 이진 파일을 깨뜨릴 것입니다.

다른 팁

마일에서 답을 보강하기 위해 PNG 파일의 처음 8 바이트 특별히 설계되었습니다.

  • 89- 첫 번째 바이트는 비트 8이 벗겨지지 않았다는 점검입니다.
  • "PNG" - 누군가가 PNG 형식임을 읽게하십시오.
  • 0D 0A- DOS-> UNIX 변환이 있는지 확인하기 위해 DOS 종말 표시기
  • 1A- 파일이 바이너리 모드로 열렸는지 확인하기 위해 DOS 종료 문자 문자
  • 0A-UNIX-> DOS 변환이 있는지 확인하려면 UNIX 종료 라인 문자

코드는 설계된대로 1A에서 중지됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top