1. 程式人生 > >Android ExifInterface 圖片資訊 讀取時中文亂碼解決方案

Android ExifInterface 圖片資訊 讀取時中文亂碼解決方案

對於圖片資訊的讀取,通過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 {
 stringBuilder.append("?");
} ++index;}return stringBuilder.toString() ;
沒錯google給我們開了一個很大的玩笑,任何編碼的ascii值小於32,那麼就用”?“ 代替。所以無論我們怎麼處理字串的讀入與讀出的方式,只要是不在這個範圍內通通用”?“來代替,這就不可避免的導致了中文亂碼的問題。那麼如何解決這個問題呢?

很簡單,首先我們需要知道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