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

时间:2014-03-23 19:01:09

标签: android csv utf-8 ansi

我的程序下载一个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;
}

2 个答案:

答案 0 :(得分:3)

&#34; ANSI&#34;是一个模糊的,误导性的术语,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字符集中有其他可打印字符代替&#34;等效字符中的控制字符&#34; ISO字符集。但与ISO-8859-1的情况不同,其中Windows-1252在同一位置具有所有8859-1的可打印字符,Windows-1250在不同位置具有一些可打印字符。考虑到所有这些因素,理想情况下,您可以确定实际使用的编码。例如,如果数据使用仅在Windows-1250中的欧元,则可以在实例化InputStreamReader时指定:

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

答案 1 :(得分:1)

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

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

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