gpt4 book ai didi

java如何区分文件编码ISO-8859-1和UTF-8?

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:19 26 4
gpt4 key购买 nike

我有一个 Android 应用程序,它使用 SQL 脚本读取文件以将数据插入 SQLite DB。但是我需要知道这个文件的 exatly 编码,我有一个从 SQLite 读取信息的 EditText,如果编码不正确,它将显示为无效字符,如“?”而不是“ç、í、ã”等字符。

我有以下代码:

FileInputStream fIn  = new FileInputStream(myFile);
BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn, "ISO-8859-1"));
String aDataRow;
while ((aDataRow = myReader.readLine()) != null) {
if(!aDataRow.isEmpty()){
String[] querys = aDataRow.split(";");
Collections.addAll(querysParaExecutar, querys);
}
}
myReader.close();
<小时/>

这适用于“ISO-8859-1”编码,如果我将字符集设置为“UTF-8”,则适用于 UTF-8。我需要以编程方式检测字符集编码(UTF-8 或 ISO-8859-1)并将正确的编码应用于我的代码。有没有简单的方法可以做到这一点?

最佳答案

我用 lib 通用 chardet 解决了这个问题。一切正常,符合预期。

FileInputStream fIn  = new FileInputStream(myFile);
byte[] buf = new byte[4096];
UniversalDetector detector = new UniversalDetector(null);
int nread;
while ((nread = fIn.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
detector.dataEnd();
String encoding = detector.getDetectedCharset();
String chartsetName = null;
if (encoding.equalsIgnoreCase("WINDOWS-1252")){
chartsetName = "ISO-8859-1";
}
if (encoding.equalsIgnoreCase("UTF-8")){
chartsetName = "UTF-8";
}

BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn, chartsetName));

关于java如何区分文件编码ISO-8859-1和UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46981216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com