添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

个人博客请访问 http://www.x0100.top

Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 “+“ “/“这一共64个字符来编码原始字符(还有垫字符“=“)。一个字符本身是1个字节,也就是8位,而Base64编码后的一个字符只能表示能表示6位的信息。也就是原始字符串中3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME传输需求,在传输过程中都是用ASCII支持的可见字符。Base64是基于字节的编码,所以不同字符集下的相同字符在Base64下可能有着不同编码

在进过Base64编码后的字符串无法解码,解码时提示RuntimeError

将编码后的字符串输出后发现字符串中存在换行符

import it.sauronsoftware.base64.Base64;
public class TestBase64 {
    public static void main(String[] args){
        String message = "{\"begin_time\":\"2016-09-13T19:06:00+08:00\",\"end_time\":\"2016-10-29T19:06:00+08:00\",\"name\":\"testExam\",\"score\":[{\"score\":\"0\",\"qid\":\"1\"}],\"questions\":[{\"name\":\"A+B\",\"qid\":\"1\"}],\"eid\":\"1\"}";
        System.out.println(Base64.encode(message));
eyJiZWdpbl90aW1lIjoiMjAxNi0wOS0xM1QxOTowNjowMCswODowMCIsImVuZF90aW1lIjoiMjAx
Ni0xMC0yOVQxOTowNjowMCswODowMCIsIm5hbWUiOiJ0ZXN0RXhhbSIsInNjb3JlIjpbeyJzY29y
ZSI6IjAiLCJxaWQiOiIxIn1dLCJxdWVzdGlvbnMiOlt7Im5hbWUiOiJBK0IiLCJxaWQiOiIxIn1d
LCJlaWQiOiIxIn0=

观察测试结果

  • base64编码后出现了换行符
  • 如果去除换行符 字符串能正常解码

根据RFC822规定,BASE64Encoder编码每76个字符,还需要加上一个回车换行 
部分Base64编码的java库还按照这个标准实行

换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的编码字符串是不带换行符的

概述Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 “+“ “/“这一共64个字符来编码原始字符(还有垫字符“=“)。一个字符本身是1个字节,也就是8位,而Base64编码后的一个字符只能表示能表示6位的信息。也就是原始字符串中3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME传输需求,在传输过程中都是用ASCII支持的可见字符。Base64是基...
给天津海关开发手机插件。 他们的API返回的文件base64遵循了RFC822规定,即BASE64编码每76个字符,还需要加上一个回车换行。 这就导致了我的Ant Design Mobile图片控件不能正常的显示缩略图。 因此,我需要在base64去掉这些回车换行。 1 successCallback(filePath) { 2 const pathLis...
用post传图片base位字符串时。有时会出现对方接受的base64字符串不完整。 故要发送请求时,可以先把base64位字符串的换行符等替换掉 str= str.replaceAll("[\s*\t\n\r]", “”);
1)Base64编码解码包下载:http://commons.apache.org/proper/commons-codec/       下载commons-codec-1.9.jar里面有base64类org.apache.commons.codec.binary.Base64; 2)如果用JRE默认的sun.misc.BASE64Decoder和sun.misc.BASE64Enco
Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 “+“ “/“这一共64个字符来编码原始字符(还有垫字符“=“)。一个字符本身是1个字节,也就是8位,而Base64编码后的一个字符只能表示能表示6位的信息。也就是原始字符串中3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME传输需求,在传输过程中都是用ASCII支持的可见字符。Base64是基于字节的编码,所以不同字符集下的相同字符在Base64下可能有着不同编码 问题描述 在进过Base64编码
s = s.replaceAll("\r\n", ""); 或者以下也可以 https://blog.csdn.net/wsjzzcbq/article/details/82869193 后来百度了一下,有经过老师的提示,说base64因为受长度限制,字符串过长会自动换行,刚开始修改如下: baseStr.replaceAll("\r","").replaceAll("\n","").replaceAll("\r\n","") 结果还是生成不了,将数据拷贝出来发现数据里还有空格,出现回车换行是正常的,但是出现空格是不正常的呀,百度了一下,看到有人帖出来,说是因为b
json格式转base64编码后自带换行问题 问题json格式转base64编码格式后自带换行,导致转换后图片无法打开,转换出来的base64编码如下图。 很明显,传过来的base64编码格式数据明显出现换行,原因统一编码格式utf-8,再通过json传输过程中会出现base64自带换行。 **解决方法:**使用去掉"\\r\\n"去除多余的换行。 参考Java代码: public static void main(String[] args) { String base64 = nul
RFC2045[https://www.ietf.org/rfc/rfc2045.txt]中有规定: The encoded output stream must be represented in lines of no more than 76 characters each. Base64一行超过76字符后会自动添加回车换行符。 当编码一个长字符串时,会出现每隔76个字符添加一个回... BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); BIO_write(bio, input.c_str(), input.length()); BIO_flush(bio); BIO_get_mem_ptr(bio, &bufferPtr); std::string output(bufferPtr->data, bufferPtr->length); BIO_free_all(bio); return output; 这段代码将输入字符串 `input` 进行 Base64 编码,并返回编码后的字符串。你可以通过调用 `base64_encode` 函数来实现你的需求,例如: ```cpp std::string input = "Hello, world!"; std::string output = base64_encode(input); std::cout << output << std::endl; // 输出 "SGVsbG8sIHdvcmxkIQ==" 注意:为了避免输出的编码字符串中包含换行符,这里使用了 `BIO_set_flags` 函数将 `BIO` 对象的标志设置为 `BIO_FLAGS_BASE64_NO_NL`。如果你需要输出包含换行符编码字符串,可以不调用这个函数。