我的程序下载一个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;
}
答案 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)而不是系统默认编码。