最近在做音樂歌詞讀寫的項目的時候,遇到一個很煩的問題,我們在讀取保存在本地的歌詞的時候出現亂碼,在有的手機上面沒有這個問題,在有的手機上就有這個問題。當時是我負責這塊,郁悶了半天,專門為這個問題,查了各個手機的api支持的字符集,可是最後沒有很好的解決這個問題,先是直接讀到一個byte[]裡面再new (byte[],"UTF-8")亂碼問題大大的有,後來在讀出的時候也是將流轉化為DataInputStream,再去readUTF(),還是亂碼。
上面是小插曲,其實解決這樣子的問題很簡單,只要控制寫和讀的一致性就沒有問題了。
比如:
寫操作
public synchronized void saveLyricFile(String data, String name) {
if (data == null || data.length() == 0) {
return;
}
OutputStream os = null;
DataOutputStream DOS = null;
FileConnection fc = null;
try {
fc = (FileConnection) Connector.open(
"file:///" + musicSavePath+ name);
if (fc.exists()) {
//存在就不保存了
fc.close();
fc = null;
return;
}
fc.create();
os = fc.openOutputStream();
DOS = new DataOutputStream(os);
DOS.writeUTF(data);
DOS.close();
os.close();
fc.close();
fc = null;
} catch (IOException ex) {
try {
fc.close();
DOS.close();
os.close();
fc.close();
fc = null;
} catch (IOException ex1) {
ex1.printStackTrace();
}
ex.printStackTrace();
} finally {
try {
DOS.close();
os.close();
fc.close();
fc = null;
} catch (IOException ex1) {
ex1.printStackTrace();
}
}
}
在讀保存的文件的時候就可以直接
DataInputStream dis = new DataInputStream(is);
String lrcText = dis.readUTF();
這樣子就沒有什麼亂碼問題了。