문제

Base64에 인코딩 된 문자열이 있습니다 (2 달러 표시가 있으므로 일반적인 Base64 String이 아닙니다).

문제 : base64.decode64 (또는 .unpack ( "m"))는 로컬 머신 (Ruby 1.8.6)에서 잘 디코딩하지만 Ruby 1.8.5 (Heroku에서 사용하는 버전)에서는 작동하지 않습니다.

어떤 아이디어?

편집하다:

나는 가지고있다 :

$$YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30=

나는 '...'로 디코딩하는 데 성공했지만 로로쿠 서버 (Ruby 1.8.5, 루비 버전은 문제가 아닐 수도 있습니다)

도움이 되었습니까?

해결책

달러 표시는 Base64 사양의 일부가 아닙니다.

단순히 선두를 벗기십시오 $$ 풀기 전에 :

str.sub(/^\$*/, '').unpack('m')

새로운 비 바이스 64 자, 새로운 (루비 1.8.6) 동작을 모방하는 모든 비제선을 제거하려면

str.gsub(/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/]/, '').unpack('m')

루비 1.8.6은 모든 비 기반 64 기호를 무시합니다 ( $) 문자열 내부에서 디코딩하는 반면 1.8.5는 그러한 첫 번째 문자에서 처리를 중지합니다 ( pack.c 루비 소스에서.)

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