如何在Android中将下载的csv文件(ANSI)转换为UTF-8

问题描述 投票:-1回答:2

我的程序下载一个CSV文件,拆分它,然后用它来构建一个listView,但是有些字符错了。我在notepad ++中检查了CSV文件,我看到字符编码是ANSI。如何将其转换为UTF-8。

@Override
protected List<Teendo> doInBackground(String... params) {
try {

        URL url = new URL("http://www.programozas-oktatas.hu/androidvizsga/todo.csv");
        InputStream is = url.openStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);

        String sor = br.readLine();

        while ((sor = br.readLine()) != null) {
            String [] darabok = sor.split(";");
            if (darabok.length > 1) {
                String megnevezes = darabok[0];
                String [] datumdarabok = darabok[1].split("-");
                int ev = Integer.parseInt(datumdarabok[0]);
                int ho = Integer.parseInt(datumdarabok[1]);
                int nap = Integer.parseInt(datumdarabok[2]);
                int fontossag =  Integer.parseInt(darabok[2]);
                Teendo teendo = new Teendo (megnevezes,ev,ho,nap,fontossag);
            teendoList.add(teendo);
            }
        }
    } catch (MalformedURLException e) {
        Log.w("DOWNLOAD", e.getMessage());
    } catch (IOException e) {
        Log.w("DOWNLOAD", e.getMessage());
    }           
    return teendoList;
}
android csv utf-8 ansi
2个回答
3
投票

“ANSI”是一个模糊的,误导性的术语,should be avoided

在这种情况下,如果文件是匈牙利语,请使用支持这些字符的编码:ISO-8859-2或Windows-1250 - 而不是ISO-8859-1。例如,第一行包含:

"Határidõ"   // lowercase-O with tilde, ISO-8859-1
"Határidő"   // lowercase-O with double-acute, ISO-8859-2

Windows字符集具有其他可打印字符,而不是“等效”ISO字符集中的控制字符。但与ISO-8859-1的情况不同,在Windows-1252中,所有8859-1的可打印字符都在同一个地方,Windows-1250在不同的地方有一些可打印的字符。考虑到所有这些因素,理想情况下,您可以确定实际使用的编码。例如,如果数据使用仅在Windows-1250中的欧元,则可以在实例化InputStreamReader时指定:

InputStreamReader isr = new InputStreamReader(is, "Windows-1250");

1
投票

告诉您的InputStreamReader使用正确的编码:

InputStreamReader isr = new InputStreamReader(is, "ISO-8859-1");

这将导致文件被读取为ISO-8859-1(ANSI)而不是系统默认编码。

© www.soinside.com 2019 - 2024. All rights reserved.