[ruby] Ruby의 base64 인코딩 문자열에서 이상한 \ n
Ruby에 내장 된 Base64 라이브러리에 ‘\ n’이 추가되었습니다. 이유를 찾을 수 없습니다. 이 특별한 예를 들어 :
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'base64'
=> true
irb(main):003:0> str = "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
=> "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
irb(main):004:0> Base64.encode64(str)
=> "MTExMC0tYWQ2Y2EwYjA2ZTFmYmViN2U2NTE4YTA0MThhNzNhNmUwNGE2NzA1\nNA==\n"
\ n은 끝에서 마지막과 6 번째 위치에 있습니다. 디코더 (Base64.decode64)는 이전 문자열을 완벽하게 되돌립니다. 이상한 것은 \ n은 인코딩 된 문자열에 값을 추가하지 않는다는 것입니다. 출력 문자열에서 줄 바꿈을 제거하면 디코더가 완벽하게 다시 디코딩합니다.
irb(main):005:0> Base64.decode64(Base64.encode64(str).gsub("\n", '')) == str
=> true
이 외에도 다른 JS 라이브러리를 사용하여 동일한 입력 문자열의 base64 인코딩 출력을 생성했습니다. 출력에는 \ n이 없습니다.
이것은 버그입니까 아니면 다른 것입니까? 전에이 문제에 직면 한 사람이 있습니까?
참고로,
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
답변
편집 : 내가 쓴 이후이 답변 Base64.strict_encode64()
이 추가되었으므로 줄 바꿈이 추가되지 않습니다.
문서 가 다소 혼란스럽고 b64encode
메서드는 60 번째 문자마다 줄 바꿈을 추가해야하며 encode64
메서드 예제 는 실제로 메서드를 사용하고 b64encode
있습니다.
pack("m")
사용 된 Array 클래스 의 메소드 encode64
도 줄 바꿈을 추가하는 것 같습니다 . 이것이 선택 사항이 아닌 디자인 버그라고 생각합니다.
줄 바꿈을 직접 제거하거나 레일을 사용 하는 경우 메소드를 사용하여 ActiveSupport :: CoreExtensions :: Base64 :: Encoding 이 encode64s
있습니다.
답변
루비 -1.9.2에는 끝에 \ n (줄 바꿈)을 추가하지 않는 Base64.strict_encode64가 있습니다.
답변
예, 이것은 정상입니다. 이 문서 는 라인 분할을 보여주는 예제를 제공합니다. base64는 다른 언어에서도 마찬가지입니다 (예 : Python).
내용없는 줄 바꿈이 인코딩 단계에서 추가되는 이유는 base64가 원래 이진 내용을 전자 메일로 보내기위한 인코딩 메커니즘으로 고안 되었기 때문입니다. 필요하지 않은 경우 교체하십시오.
답변
다음과 같이 벗겨 지거나 무시해야합니다.
Base64.encode64(str).gsub(/\n/, '')
답변
strict_encode64
방법을 사용하십시오 . encode64
60 개의 기호마다 \ n 추가
답변
\n
사용할 때 추가가 Base64#encode64
정확한지,이 게시물을 체크 아웃 : https://glaucocustodio.github.io/2014/09/27/a-reminder-about-base64encode64-in-ruby/