当前位置: 首页 > 知识库问答 >
问题:

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

督弘化
2023-03-14

我有一个Android应用程序,它读取带有SQL脚本的文件,将数据插入SQLite数据库。然而,我需要知道这个文件的详细编码,我有一个从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)并将正确的编码应用于我的代码。有简单的方法吗?

共有1个答案

云默
2023-03-14

我用lib通用字符解决了这个问题。它按预期工作得很好。

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));
 类似资料:
  • 问题内容: 有谁知道如何将字符串从ISO-8859-1转换为UTF-8并重新转换为Java? 我从网络上获取一个字符串并将其保存在RMS(J2ME)中,但是我想保留特殊字符并从RMS中获取字符串,但要使用ISO-8859-1编码。我该怎么做呢? 问题答案: 通常,你无法执行此操作。UTF-8能够编码任何Unicode代码点。ISO-8859-1只能处理其中的一小部分。因此,从ISO-8859-1转

  • 我很难使用XSLT(使用氧气运行转换)从UTF-8编码的XML源生成ISO-8859-1编码的文本输出。 例如,当源包含破折号时,oxyow会抛出一个错误,“输出字符在此编码中不可用(十进制8211)”。 有简单明了的解决办法吗? 谢谢你的任何建议。

  • 我正在为Android开发一个应用程序,在那里我必须解析不同的XML文件。其中大多数是用UTF-8编码的,但也有少数是用ISO-8859-1编码的。 我处理输入的代码如上所示。文档介绍了: 如果没有字符流,但有字节流,解析器将使用InputSource中指定的编码使用该字节流,或者(如果没有指定编码)使用XML规范中的算法自动检测字符编码。 我传递的是,但我没有指定编码,因此根据文档,编码应该被自

  • 问题内容: 我正在阅读XML文档(UTF-8),并最终使用ISO-8859-1在网页上显示内容。正如预期的那样,有几个字符显示不正确,比如,和(他们显示为?)。 是否可以将这些字符从UTF-8转换为ISO-8859-1? 这是我编写的尝试此功能的代码段: 我不太确定发生了什么问题,但是我认为是re​​adLine()引起了麻烦(因为字符串将是Java / UTF-16编码的?)。我尝试的另一种变化

  • 问题内容: 我有一个编码为iso-8859-1的文件,其中包含诸如ô的字符。 我正在用Java代码读取此文件,例如: 但是ô字符总是乱码,通常打印为?。。 我已经读过这个主题(并且在途中学到了一点),例如 http://www.joelonsoftware.com/articles/Unicode.html http://bugs.sun.com/bugdatabase/view_bug.do?b

  • XML生成成功,但是从源中获取的数据内容仍然采用ISO编码,没有使用UTF8解析。 通过将文件编码更改为ISO8859-1,内容被成功解析。 在JAXB对象中设置数据之前,我尝试转换数据,但在UTF-8中仍未解析。 问题只是在Linux下精确,有没有人知道如何操作ISO_8859_1数据并在xml中设置它而没有问题?