首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby中的base64编码字符串奇怪\n

Ruby中的base64编码字符串奇怪\n
EN

Stack Overflow用户
提问于 2010-04-12 17:30:32
回答 5查看 57.5K关注 0票数 173

Ruby内置的Base64库添加了一些\n,我找不到原因。对于这个特殊的例子:

代码语言:javascript
运行
复制
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位于末尾和倒数第六个位置。解码器(Base64.decde64)完美地返回旧字符串。奇怪的是,这些\n不会给编码的字符串添加任何值。当我从输出字符串中删除换行符时,解码器再次完美地解码它。

代码语言:javascript
运行
复制
irb(main):005:0> Base64.decode64(Base64.encode64(str).gsub("\n", '')) == str
=> true

更重要的是,我使用了另一个JS库来生成相同输入字符串的base64编码输出,输出中没有\n。

这是一个bug还是别的什么?以前有没有人遇到过这个问题?

仅供参考,

代码语言:javascript
运行
复制
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
EN

回答 5

Stack Overflow用户

发布于 2011-01-13 20:32:42

在ruby-1.9.2中,您有Base64.strict_encode64,它不会在末尾添加\n (换行符)。

票数 118
EN

Stack Overflow用户

发布于 2010-04-12 17:43:06

是啊,这很正常。doc给出了一个示例,演示了行分割。base64在其他语言中也做同样的事情(例如。Python)。

在编码阶段添加无内容换行符的原因是,base64最初设计为一种用于在电子邮件中发送二进制内容的编码机制,其中行长度是有限的。如果您不需要它们,请随时更换它们。

票数 9
EN

Stack Overflow用户

发布于 2013-02-22 23:28:52

似乎它们必须被剥离/忽略,就像:

代码语言:javascript
运行
复制
Base64.encode64(str).gsub(/\n/, '')
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2620975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档