对于图片信息的读取,通过android本身提供ExifInterFace这个类可以实现。
对于ExifInterface这个类的TAG解释可以查看:https://developer.android.google.cn/reference/android/media/ExifInterface.html
本文主要讲在读区中文时出现的乱码问题,看下面的ExifInterface部分源码:
读入时编码:
private static final Charset ASCII = Charset.forName("US-ASCII");可以看出google的支持编码就只是”US-ASCII“。
读出时值:
StringBuilder stringBuilder = new StringBuilder(); while (index < numberOfComponents) { int ch = bytes[index]; if (ch == 0) { break; } if (ch >= 32) { stringBuilder.append((char) ch); } else {没错google给我们开了一个很大的玩笑,任何编码的ascii值小于32,那么就用”?“ 代替。所以无论我们怎么处理字符串的读入与读出的方式,只要是不在这个范围内通通用”?“来代替,这就不可避免的导致了中文乱码的问题。那么如何解决这个问题呢?stringBuilder.append("?");} ++index;}return stringBuilder.toString() ;
很简单,首先我们需要知道ExifInterface在不同的android的版本支持上面所读写的风格完全不同,为了能够实现统一的支持,我们需要把源码给抠出来,做一些小改动,自己实现图片信息的读写。
首先将读入时的编码换成自己想要的编码:如 utf-8
private static final Charset ASCII = Charset.forName("UTF-8");
其次修改读出时的字符转换方式:
String data = new String(bytes,"UTF-8"); return data;
OK,就是这么简单。
源码在:http://download.csdn.net/download/w1072654398/10116354