Android Base64 URI 编解码bad base-64异常处理

这篇随笔介绍一个常用的Base64对URI编解码时不容易发现的异常状况。

Android使用NanoHTTPD作为HTTP服务器对外提供HTTP数据流传输的应用里,用Base64对一个资源进行了编码,如下(调试截图):

资源:/storage/emulated/0/Movies/The Mountain.mp4

Base64编码后:L3N0b3JhZ2UvZW11bGF0ZWQvMC9Nb3ZpZXMvVGhlIE1vdW50YWluLm1wNA==

此时该资源的链接是这样的:http://xxxxxxxxxxxx/L3N0b3JhZ2UvZW11bGF0ZWQvMC9Nb3ZpZXMvVGhlIE1vdW50YWluLm1wNA==

当一个外部请求设备请求该资源时,传来的URI如下

/L3N0b3JhZ2UvZW11bGF0ZWQvMC9Nb3ZpZXMvVGhlIE1vdW50YWluLm1wNA==

即比原始编码后的URI前面多一个"/",如果不做任何处理这个URI"/L3N0b3JhZ2UvZW11bGF0ZWQvMC9Nb3ZpZXMvVGhlIE1vdW50YWluLm1wNA=="用Base64解码即发生bad-base64异常,判断首字符为"/"时去掉即解决。

时间: 2024-10-07 06:42:27

Android Base64 URI 编解码bad base-64异常处理的相关文章

uri编解码

相关函数如下:(都是全局函数) encodeURI(URIString):将文本字符串编码为有效的统一资源标示符URI decodeURI(URIString) encodeURIComponent(s):编码URI的一部分或者是其他待编码的字符串 decodeURIComponent(s) encodeURI编码规则: 1.对于encodeURI(),ASCII字母.数字."- _  .  !  ~ * ' ()"等标点不会编码: 2.由于encodeURI用于编码URI,因而在ur

android MediaCodec 音频编解码的实现——转码

原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说:好记性不如写博客,善于总结的人才能走的更远.写博客这种利人利己的好处我就不一 一列举了,总之,谁做谁知道,哈哈.在文章中如果有什么问题或者错误,欢迎各位的讨论和指正.好了,步入正题,来看看我们今天要讲的MediaCodec 一.概述 由于项目的需要,需要将mp3文件转码为aac音频文件,起初打算移

Android JNI Lame编解码实现wav到MP3的转换

1.JNI简介 JNI全称为Java Native Interface(JAVA本地调用).从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C++)进行交互.并非从Android发布才引入JNI的概念的. 2.JNI与NDK 简单来说,Android的NDK提供了一些交叉编译工具链和Android自带的库,这些Android的库可以让开发者在编写本地语言的程序时调用.而NDK提供的交叉编译工具链就对已经编写好的C&C++代码进行编译,生成库

Base64编解码Android和ios的例子,补充JNI中的例子

1.在Android中java层提供了工具类:android.util.Base64; 里面都是静态方法,方便直接使用: 使用方法如下: Java代码   // Base64 编码: byte [] encode = Base64.encode("Hello, World".getBytes(), Base64.DEFAULT); String enc = new String(encode); Log.d("","base 64 encode = &qu

Android实战技巧之三十七:图片的Base64编解码

通常用Base64这种编解码方式将二进制数据转换成可见的字符串格式,就是我们常说的大串,10块钱一串的那种,^_^. Android的android.util包下直接提供了一个功能十分完备的Base64类供我们使用,下面就演示一下如何将一张图片进行Base64的编解码. 1.找到那张图片 public void onEncodeClicked(View view) { //select picture Intent intent = new Intent(); intent.setType("i

base 64 编解码

base 64 编解码 1. base64的编码都是按字符串长度,以每3个8bit的字符为一组, 2. 然后针对每组,首先获取每个字符的ASCII编码, 3. 然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节 4. 然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节 5. 然后将这4个8bit的字节转换成10进制,对照Base64编码表 (下表),得到对应编码后的字符. 实现: ///////////////

Android中使用commons-codec-1.6.jar 进行Base64编解码出现的问题

编码时出现异常: java.lang.NoSuchMethodError: No static method encodeBase64String([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framewo

Android 对保存在 sharedpreference的重要数据进行编解码

有时候为了登录方便会将用户名和密码保存在 sharedpreference里面,可是如果不加以处理密码将以明文保存. 在Android中java层提供了工具类:android.util.Base64;用Base64对密码进行编码和解码. 1 // Base64 编码: 2 byte [] encode = Base64.encode("Hello, World".getBytes(), Base64.DEFAULT); 3 4 String enc = new String(encod

openssl命令行Base64编解码

openssl对base64编解码的规范支持较差,用它编解码的结果别的语言如php处理很不方便,注意的几点整理如下 1,如果php加密结果做base64编码长度小于64,则需要添加一个换行符openssl才能解码: 2,php需要对base64编码结果每隔64个字符插入一个换行符,openssl才能解码.(原因是openssl默认bufsize缓冲区大小16k,但是一旦涉及base64的计算缓冲区只有80字节,一旦编码结果超过80字节则会计算失败,base64编解码无法更改缓冲区大小) 示例代码