base64-BASE64编码 android 与 C# 结果不一致

问题描述

BASE64编码 android 与 C# 结果不一致

JAVA代码:

    ByteArrayOutputStream v0 = new ByteArrayOutputStream();
        arg3.compress(Bitmap$CompressFormat.PNG, 100, ((OutputStream)v0));
        return Base64.encodeToString(v0.toByteArray(), 0);

C#代码:

 using (var ms = new MemoryStream())
            {
                bitmap.Save(ms, ImageFormat.Png);
                byte[] imageBytes = ms.ToArray();
                var str = Convert.ToBase64String(imageBytes, Base64FormattingOptions.InsertLineBreaks);
                return str;
            }

对同一张png图片进行编码后。得到的结果不一致。
开头和结尾是一样的。中间部分不一样。结果的长度也不一样。相差甚远。

解决方案

Java 中 byte : -128~127

C# 中 byte : 0~255

因此虽然表达到通信层上都会根据通信适配去转换,但是由于base64是提前就编码了的所以会造成不一致问题。

但是只要能读取出显示图片就行了,不必太纠结过程,可参考:
http://blog.csdn.net/a9529lty/article/details/9417943

解决方案二:

Java 中 byte : -128~127

C# 中 byte : 0~255.
从github上翻出来一段代码,正好是将andorid 的base64 类进行完整翻译得到的C#类。
使用后结果还是一样。与JAVA的编码后结果存在差异。
后来考虑是JAVA和C#的byte差异。但是没找到很好的解决方法去解决这个问题。

解决方案三:

详细参考,希望对你有帮助http://blog.csdn.net/tomatozq/article/details/20773559

解决方案四:

/**
* BASE标准解码
*
* @author lz
* @param buff
* @return
*/
public static String decodeBase64(String str) {
return str == null ? null : StringUtils.newStringUtf8(base64.decode(str));
}

/**
 * BASE64 编码
 *
 * @param s
 * @return
 */
public static String encodeBufferBase64(byte[] buff) {
    return buff == null ? null : encoder.encodeBuffer(buff).trim();
}

解决方案五:

/**
* BASE标准解码
*
* @author lz
* @param buff
* @return
*/
public static String decodeBase64(String str) {
return str == null ? null : StringUtils.newStringUtf8(base64.decode(str));
}

/**
 * BASE64 编码
 *
 * @param s
 * @return
 */
public static String encodeBufferBase64(byte[] buff) {
    return buff == null ? null : encoder.encodeBuffer(buff).trim();
}

解决方案六:

解码 能解出图片 编码 就是正确的

时间: 2024-08-29 02:36:06

base64-BASE64编码 android 与 C# 结果不一致的相关文章

Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码

首先是网上大神给的类 package com.duanlian.daimengmusic.utils; public final class Base64Util { private static final int BASELENGTH = 128; private static final int LOOKUPLENGTH = 64; private static final int TWENTYFOURBITGROUP = 24; private static final int EIGH

Base64在线编码解码实现代码 演示与下载

在线演示地址:gb2312版本 http://tools.jb51.net/tools/base64_decode-gb2312.phputf8版本 http://tools.jb51.net/tools/base64_decode-utf8.php复制代码 代码如下:<?php header('Content-Type: text/html; charset=gb2312'); $txt1 = stripslashes(trim( @$_POST['text1'])); $button = @

javascript从image转换为base64位编码的String_javascript技巧

最近需要把app的微信分享方法开放给webview,涉及到分享的图片,如果通过传送图片连接,那将要在后台再取一次图片文件,会影响速度,我选择webview把image以base64位编码的方式传给本地应用. 下面是实现的参考代码: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"&g

Base64在线编码解码实现代码 演示与下载_php实例

在线演示地址:gb2312版本 http://tools.jb51.net/tools/base64_decode-gb2312.phputf8版本 http://tools.jb51.net/tools/base64_decode-utf8.php 复制代码 代码如下: <?php header('Content-Type: text/html; charset=gb2312'); $txt1 = stripslashes(trim( @$_POST['text1'])); $button =

apk-两台机器的android studio aok签名不一致

问题描述 两台机器的android studio aok签名不一致 两台机器上的android studio用同样keyStore生成的apk,md5值不同是为什么? keyStore是在机器A上的android studio上生成,A的android studio没有设置master password ,机器B上有master password,虽然我觉得这没什么关系,md5应该只跟keyStore有关吧? 请问这到到底是怎么回事?很困扰啊 解决方案 http://www.oschina.ne

我的Java开发学习之旅------&amp;gt;Base64的编码思想以及Java实现

Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法.Base64是一种最常见的二进制编码方法. 一.编码规则 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9.符号"+"."/"(再加上作为垫字的"=&qu

C#中Base64之编码,解码方法

编码 编码public string EncodeBase64(string code_type,string code) { string encode = ""; byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code); try { encode = Convert.ToBase64String(bytes); } catch { encode = code; } return encode; }解码public

编码-android studio导入eclipse项目

问题描述 android studio导入eclipse项目 android studio导入eclipse项目后,出现了乱码,原先是GBK的,在studio中我也把编码改成了GBK 代码里的中文也不乱码了,可是问题来了: 重新编译后,还是提示乱码,下面是截图 解决方案 Android Studio 导入 Eclipse 的代码后,运行时中文显示乱码 Android Studio 1.2 编译出来在手机上运行时显示乱码 解决方案二: android studio 导入eclipse项目乱码处理

编码-android studio 打开eclipse项目中文乱码(已经试过几种方法都不行)

问题描述 android studio 打开eclipse项目中文乱码(已经试过几种方法都不行) 项目是从师兄那里传下来的,当时是在eclipse下的项目,我用eclipse看了一下编码是GBK.目前在android studio 中中文注释和跑起来之后界面上的所有中文都是乱码. 目前试过的方法有: 在android studio 中调setting>appearance中的字体,没有用 setting>editor>file encoding,如图不管如何更改设置,apply按不动!直