Ruby 1.8.5에서 달러 표시가있는 Decode Base64
문제
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
루비 소스에서.)