我有一个代码,可解析CSV文件(带有Twitter数据)中的字符串,并将其提供给新的KML文件。当我解析来自Twitter数据的注释时,当然会有未知的标记,例如:🚨。当我在Google Earth中打开新的KML文件时,由于此未知令牌而收到错误消息。问题:当我解析字符串时,我可以告诉Java它应该丢弃字符串中的所有未知标记,以便我的KML中没有任何未知标记吗?
谢谢
代码如下:
String csvFile = "twitter.csv";
BufferedReader br = null;
String line = "";
String cvsSplitBy = ";";
String[] twitter = null;
int row_desired = 0;
int row_counter = 0;
String[] placemarks = new String[1165];
// ab hier einlesen der CSV
try {
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
if (row_counter++ == row_desired) {
twitter = line.split(cvsSplitBy);
placemarks[row_counter] =
"<Placemark>\n"+
"<name>User ID: "+twitter[7]+"</name>\n"+
"<description>This User wrote: "+twitter[5]+" at the: "+twitter[6]+"</description>\n"+
"<Point>\n"+
"<coordinates>"+twitter[1]+","+twitter[2]+"</coordinates>\n"+
"</Point>\n"+
"</Placemark>\n";
row_desired++;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
for(int i = 2; i <= 1164;i++){
String kml2 = kml.concat(""+placemarks[i]+"");
kml=kml2;
}
kml = kml.concat("</Document></kml>");
FileWriter fileWriter = new FileWriter(filepath);
fileWriter.write(kml);
fileWriter.close();
Runtime.getRuntime().exec(googlefilepath + filepath);
}
文本文件的生成方式并不完全相同:您必须始终考虑所使用的字符编码。我不确定具体是Twitter的数据,但我想他们的行为与世界其他地区一样,并使用UTF-8。
基本上,避免FileReader
使用取而代之的是使用构造函数InputStreamReader
可以指定字符集。
提示:如果您使用的是Java 7+,请尝试以下操作:
for (String line : Files.readAllLines(file.toPath(), Charset.forName("UTF-8"))) { ...
更多信息
FileReader
状态的Javadoc “此类的构造函数假定默认字符编码”
您应该始终避免此类。或至少对于计算机之间可能传输的任何数据。即使是在Windows上“使用默认字符集”运行的程序,从Eclipse内部运行时也将采用UTF-8,而从Eclipse外运行时则将采用ISO_8859_1!这种来自阶级的不确定性是不好的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句