精华内容
下载资源
问答
  • Base64编码解码过程中中文乱码问题

    万次阅读 2017-08-10 14:51:20
    在利用spring定时器自动启动函数进行的过程中,当中获取到时被Base64编码过后的数据用://...来解码时会发生中文乱码问题,而如果直接用把数据提取出来放进测试函数中进行测试时,同样的解码函数,解码得到的明文就

    在利用spring定时器自动启动函数进行的过程中,当中获取到时被Base64编码过后的数据用:

    //respData为Base64编码过后的数据,deqdata为解码过后的数据
    String deqdata=new String(Base64.decodeBase64(respData));

    来解码时会发生中文乱码问题,而如果直接用把数据提取出来放进测试函数中进行测试时,同样的解码函数,解码得到的明文就不会乱码。
    这时候只要把解码函数改为:

    //respData为Base64编码过后的数据,deqdata为解码过后的数据
    String deqdata=new String(Base64.decodeBase64(respData),"utf-8");

    即可。
    至于原因,本人认为可能是利用外部传回的数据再解码的时候其默认的解码格式跟自己在本地直接测试时默认的解码格式不一致而导致的乱码问题。

    展开全文
  • C# BASE64中文乱码问题

    千次阅读 2017-02-27 20:00:39
    private string Base64Encode(string text)  {  System.Text.Encoding encode = System.Text.Encoding.ASCII;//用ASCII的话, 碰到中文就变成乱码了, 要用Default  byte[] bytedata = encode.GetBy
            private string Base64Encode(string text)
    
            {
                System.Text.Encoding encode = System.Text.Encoding.ASCII;//用ASCII的话, 碰到中文就变成乱码了, 要用Default
                byte[]  bytedata = encode.GetBytes( text);
                return Convert.ToBase64String(bytedata,0,bytedata.Length);
            }
    展开全文
  • 使用base64转码中文名称后解码时发现乱码 截取字符串:{"userName":"冯���城","userId":"124"} 原因 字符串获取字节码默认是 ISO-8859-1 static byte[] encode(String charsetName, char[] ca, int off, int ...

    前言

    使用base64转码中文名称后解码时发现乱码

     截取字符串:{"userName":"冯���城","userId":"124"}
    

    原因

    字符串获取字节码默认是 ISO-8859-1

       static byte[] encode(String charsetName, char[] ca, int off, int len)
            throws UnsupportedEncodingException
        {
            StringEncoder se = deref(encoder);
            String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;
            if ((se == null) || !(csn.equals(se.requestedCharsetName())
                                  || csn.equals(se.charsetName()))) {
                se = null;
                try {
                    Charset cs = lookupCharset(csn);
                    if (cs != null)
                        se = new StringEncoder(cs, csn);
                } catch (IllegalCharsetNameException x) {}
                if (se == null)
                    throw new UnsupportedEncodingException (csn);
                set(encoder, se);
            }
            return se.encode(ca, off, len);
        }
    
    

    解决

    传入字符串获得字节码时指定字符集 UTF-8
    转码

        /**
         * BASE64编码
         *
         * @param str
         * @return
         * @throws Exception
         */
        public static String encryptBASE64(final String str) {
            try {
                if (str == null || "".equals(str)) {
                    return "";
                }
                return new String(encryptBASE64(str.getBytes("UTF-8")));
            } catch (Exception ex) {
                ex.printStackTrace();
                return null;
            }
        }
    

    解码

      /**
         * BASE64解码
         *
         * @param str
         * @return
         * @throws Exception
         */
        public static String decryptBASE64(final String str) {
            try {
                if (str == null || "".equals(str)) {
                    return "";
                }
                return new String(decryptBASE64(str.getBytes("UTF-8")));
            } catch (Exception ex) {
                ex.printStackTrace();
                return null;
            }
        }
    
    

    这样编译出来的东西再转码就没问题

    String s = Base64Util.encryptBASE64(o.toString());
    --eyJ1c2VyTmFtZSI6IuWGr+WKoOaIkCIsInVzZXJJZCI6IjEyNCJ9
    {"userName":"冯加成","userId":"124"}
    
    展开全文
  • 曾在开发过程中,我们遇到了BASE64编码乱码问题,该问题的场景如下: 当web前端,将带有中文字符的字符串base64编码后,传到后端。当后端将数据取出再传给web前端时,发生了编码混乱的问题。例如,当前端向后端...

    本文由作者朱臻授权网易云社区发布。

    1问题案例

    曾在开发过程中,我们遇到了BASE64编码乱码的问题,该问题的场景如下:
    
    当web前端,将带有中文字符的字符串base64编码后,传到后端。当后端将数据取出再传给web前端时,发生了编码混乱的问题。例如,当前端向后端传入并保存为"赵俊雅和刘德华的爷爷”字符串后,当需要取出时,取出的字符串是“赵䲺fṤ9b&9occ桹⭹⭀”。这样的编码错误问题导致数据上的bug,会造成不良的用户体验。
    
    

    2 问题排查

    当我们仔细查看该两段字符串时可以发现除了首字符相同,其他字符全部面目全非。这至少可以一定程度说明,字符串在顺序编码或解码中途发生了错误。所以我们将两段字符串分别进行base64编码还原,并进行对比。
    
    6LW15L+K6ZuF5ZKM5YiY5b635Y2O55qE54i354i3(赵俊雅和刘德华的爷爷)
    
    6LW15L K6ZuF5ZKM5YiY5b635Y2O55qE54i354i3(赵䲺fṤ9b&9occ桹⭹⭀)
    
    对比可以看出两者仅有一个+号的区别,后者只是将前者的+替换成空格,这导致除首字母外,后续字母全部发生混乱,因为base64是连续编码,原理将在后面解释。
    
    那为什么会让+编程空格呢?这将从url的规范来解释,我们不难发现前后端交互时,后端会将url都会将+自动转化为空格。这基本上可以解释上述乱码的问题了。
    
    

    3原理解释:

    顺着上述介绍的顺序我们总结下上面提到的几个概念。
    
    3.1BASE64:
    
    它是一种用小规模编码集去表示较大规模编码的方法。本人的理解是:BASE64是指以64为基,存在64种编号的意思。也就是2的6次方=6bit。这64个编码(0~63)分别可以表示 [A~Z] 、[a-z]、[0~9]和[+ 、/]号 。共64种编号。 而与我们熟悉的字节编码对应的是 3*8bit=4*6bit=24bit=2的24次方。根据等式,可以将一切以字节为单位的编码方式(如UTF-8和GBK)转化成 BASE64编码,反之亦然。
    

    也就是将原本3个字节的内容转变成4个BASE字符。这样,从字符角度来讲是变得更长了,扩展成的比例为133%。

    3.2URL编码规范:
    
    我们常说的url地址也就是地址栏输入的那串字符串,WWW标准中规定了url中只能包含[0~9,a-z,A-Z]和一些特殊字符$-_.+!*'(),。而我们常用的汉字以及阿拉伯文,拉丁文等都不包含在该范围内,所以必须经过一定规则的编码才能被正确的传输。虽然说浏览器一般都带有自动转码功能,这样使得用户常常感觉不到这一规则的存在。但是,不幸的是,各方对该编码的规则是不同的,这也造成乱码的隐患。Chrome使用utf8,javascript使用unicode,ie采用系统默认编码方式如GB2312。另外一件非常值得注意的事情,浏览器向后端发送URL的时候会自动将 空格替换成+号,这在我们使用google查询的get方法时会明显看到。 query中的中文变成 %XXX,空格变成+。当后端接收到请求后会将URL中的+自动替换成空格。这就是困扰我们多时的BASE64编码乱码给我们带来的一个麻烦。
    

    3.3encodeURIComponent():

    该js的方法是前端常用的一种URL处理方式,该种方式结合了过去escape()和encodeURI()两种方法的优势,前者已经很少被使用了,严格的说前者并不是一种专门解决URL编码的方法,只是用于将字符进行unicode编码,并且对于“@ * _ + - . /”等特殊字符并没有做任何处理,这使得其对URL乱码问题并没有很好的解决。而后者encodeURI()实现了全字段的编码,不管是特殊字符还是普通字符编码后都是以utf-8的形式。那主流的encodeURIComponent(),无疑是最佳解决方案,它不会对普通字符编码,只对一些特殊字符进行编码如;/?:@&=+$,# ,这对BASE64是至关重要的。
    
    
    
    

    4可行的解决方案

    根据以上特点,我们对当前问题有一些建议性的解决方案。
    
    4.1  对于普通问题直接采用encodeURIComponent() 处理,而BASE64的工作交给后端处理。
    
    4.2 如果有必要在前端做BASE64 可以首先进行BASE64处理,再采用encodeURIComponent() 处理。
    
    4.3 另外,还可以直接使用BASE64的变种,将“+”和“/”两个特殊字符用 URL安全的“-”-和“_”字符处理,当然任何脑洞更大的字符替换也是可以的,现成的方式有safety base64等。
    
    本文只是分享个人处理该问题的经验,如遇错误之处,请各位批评指正,也欢迎各位探讨交流。
    
    
    
    
    

    更多网易技术、产品、运营经验分享请访问网易云社区。

    文章来源: 网易云社区

    展开全文
  • Base64中文乱码问题

    2015-04-02 21:01:00
    web端和app端base64解码时中文乱码问题.   web端: String data = new BASE64Encoder().encode(data.getBytes("UTF-8"));   app端 String data2 = new String(Base64.decode(data), "UTF-8...
  • 1、问题需求需要,把字符串转化为UTF-8编码之后需要base64.encode处理,但是我写了String ss = new String(value.getbytes("UTF-8"), "UTF-8");Base64.encode(ss);死活出不来,依然乱码,然后写了检测当前编码格式,...
  • BASE64解码之中文乱码问题

    千次阅读 2017-03-16 13:00:22
    BASE64解码之中文乱码问题
  • 关于Base64 加密乱码问题

    万次阅读 2018-03-15 18:04:23
    关于Base64 加密乱码问题 前台Base 64 加密后,传到后台,get请求从request 获取后发现原有的+号变成了“ ”(空字符); // 注意要空指针判断 request.getParameter(key).replace(" ", "+"...
  • base64解码后,得到的是一个字节序列:>>> base64.b64decode('5Yac5aSr5a6J5YWo56S+5Yy6')'\xe5\x86\x9c\xe5\xa4\xab\xe5\xae\x89\xe5\x85\xa8\xe7\xa4\xbe\xe5\x8c\xba'这个字节序列到底是什么,取决于你的应用上...
  • Base64编码和解码在处理英文的时候没有问题,处理中文的时候暗藏陷阱! 原因是Base64在处理字符串的时候使用平台的缺省编码方式。 Java代码 Base64b64=newBase64(); trings=newString(b64.encode(content)); ...
  • 一篇文章彻底弄懂Base64编码原理

    万次阅读 多人点赞 2018-08-16 07:42:09
    目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,...
  • android中调用webservice的方法传递参数时,将对象的数据(图片,声音等)编码成Base64,上传,下载等。
  • 1、最近做个react-native 项目,要求有个接口需要base64加密,使用js加密后发现中文会无法base64解密解决办法1、导入2个包,如果没有则请自行下载import java.io.UnsupportedEncodingException;import sun.misc.BASE...
  • 1、与第三方系统做接口要求使用Base64进行转码,但是原生的Base64类 Soap.EncdDecd 中的EncodeString 每76字符就转码,故使用 IdCoderMIME 进行编码。 uses IdCoderMIME,IdGlobal function ParseBase64UnTab: ...
  • Android之解决Base64 encode中文乱码问题

    千次阅读 2017-06-19 23:27:40
    1、问题 需求需要,把字符串转化为UTF-8编码之后需要base64.encode处理,但是我写了 String ss = new String...死活出不来,依然乱码,然后写了检测当前编码格式,然后转化UTF-8, String ss = new String(value.get
  • 1、最近做个react-native 项目,要求有个接口需要base64加密,使用js加密后发现中文会无法base64解密解决办法1、导入2个包,如果没有则请自行下载import java.io.UnsupportedEncodingException;import sun.misc.BASE...
  • Base64编码

    2019-08-13 16:02:07
    目录Base64简介编码原理索引表转换步骤补零处理其他 Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法。 Base64编码是从二进制到字符的过程,...
  • 相信很多同学在工作中,经常会用到Base64编码,那大家知道为什么会有Base64编码吗?我们为什么要使用它呢,它又是怎么实现的呢?下面就让我们来一起深入探究一下Base64编码吧。Base 家族在开始之前,我们先给大家...
  • base64解码中文乱码

    万次阅读 2017-09-11 11:09:51
    使用base64解码中文时出现乱码。 解决: 使用同一编码进行编解码。 1、com.oreilly.servlet版本 (1) 编码:  StringfileId= Base64Encoder.encode(sb.toString().getBytes("UTF-8")); (2) 解码:  String...
  • 将一个汉字转化为base64utf8中一个汉字占3个字节(byte),一个字节占8个位(bit),位就是二进制中的一个(0/1)所以一个汉字可以用3段8位的二进制表示base64就是把这些38形式的变为46形式的,然后对拆分的4*6形式的每段...
  • 知识贵在积累。byte[]转String,编码乱码问题,以及Base64编码相关学习。
  • js实现base64编码解码 base64编码原理: base64编码范围(ASCII字符范围内\u0000-\u00ff),所以每个字符必须8位,以3个字符为一组,转换为6bit的字节(3*8=4*6=24). 在每个6bit字节的高位添加0组成8bit的字节,然后将每8...
  • 使用方法:utf8to16(base64decode(你的加密字符串));

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,913
精华内容 27,165
关键字:

base64中文编码成