public void parse(String uri) {
File subtitlesFile = new File(uri);
String line;
FileInputStream is;
BufferedReader in;
try {
is = new FileInputStream(subtitlesFile);
in = getBufferedReader(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
if (in != null) {
try {
while ((line = in.readLine()) != null) {
... ...
}
} catch (IOException e) {
e.printStackTrace();
}
} else {
L.e(TAG, "readLine : read subtitle file fail.");
}
}
/**
* 根据文本的前三个字节决定编码格式
**/
private BufferedReader getBufferedReader(FileInputStream fis) {
BufferedReader reader = null;
BufferedInputStream in = new BufferedInputStream(fis);
in.mark(4);
byte[] first3bytes = new byte[3];
try {
in.read(first3bytes);//找到文档的前三个字节并自动判断文档类型
in.reset();
if (first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB && first3bytes[2] == (byte) 0xBF) {
reader = new BufferedReader(new InputStreamReader(in, "utf-8"));
} else if (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFE) {
reader = new BufferedReader(new InputStreamReader(in, "unicode"));
} else if (first3bytes[0] == (byte) 0xFE && first3bytes[1] == (byte) 0xFF) {
reader = new BufferedReader(new InputStreamReader(in, "utf-16be"));
} else if (first3bytes[0] == (byte) 0xFF && first3bytes[1] == (byte) 0xFF) {
reader = new BufferedReader(new InputStreamReader(in, "utf-16le"));
} else {
reader = new BufferedReader(new InputStreamReader(in, "GBK"));
}
} catch (IOException e) {
e.printStackTrace();
}
return reader;
}
网友评论