您的位置:首页 > 编程语言 > Java开发

java 往csv文件写入内容乱码

2017-01-05 19:48 169 查看
在往csv文件中写入内容的时候,习惯性的指定了utf-8编码,原以为啥事都没有,但是打开文件的时候,一下子就懵逼了
具体代码如下:
     
public static void main(String[] args) throws Exception {
File file = new File( "D:/country.csv");
if (! file.exists()) {
file.createNewFile();
}
OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(file ), "UTF-8" );
BufferedWriter bw = new BufferedWriter( out);
try {
String path = writeCSV.class .getResource("LocList.xml" ).getPath();
SAXReader reader = new SAXReader();
try {
Document document = reader.read(path);
Element rootElement = document.getRootElement();
Iterator< Element> iterator = rootElement.elementIterator();
Element ele = null;
while ( iterator.hasNext()) {
ele = iterator.next();
String country = ele.attributeValue( "Name");
List< Element> provinces = ele.elements();
if ( provinces == null || provinces.isEmpty()) {
writeCSVLine(country, country, country, bw);
continue;
}
for ( Element pe : provinces) {
String province = pe.attributeValue( "Name");
if ( StringUtils.isEmpty(province)) {
province = country;
}
List< Element> cities = pe.elements();
if ( cities == null || cities.isEmpty()) {
writeCSVLine(country, province, province, bw);
continue;
}
for ( Element ce : cities) {
String city = ce.attributeValue( "Name");
if ( StringUtils.isEmpty(city)) {
city = province;
}
writeCSVLine(country, province, city, bw);
}
}
}
System. out.println( "写入成功!" );
}
catch (Exception e) {
return;
}
}
finally {
bw.close();
}
}


[align=left]
[/align]

public static void writeCSVLine(String country, String province, String city, BufferedWriter bw)
throws IOException {
StringBuilder sb = new StringBuilder();
sb.append( country).append( ',').append( province).append( ',').append( city);
bw.write(sb.toString());
bw.newLine();
}


[align=left]
[/align]
[align=left]既然utf-8不行,那我们试试gb2312?[/align]
[align=left]说干就干,修改代码如下:[/align]
[align=left]
OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(file), "gb2312" );


[/align]
[align=left]
[/align]
[align=left]run as...然而,现实又一次无情的摧残着我,还是不行,没办法,那就挨个都试一遍吧,试试gbk[/align]
[align=left]
OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(file), "gbk" );


[/align]
[align=left]
[/align]
[align=left]等待着,终于,打开文件的那刹那,没看到乱码,欧耶~[/align]
[align=left]
[/align]
[align=left]那么问题来了,为什么要用gbk呢?这三者有什么区别?[/align]
[align=left]http://www.cnblogs.com/xiaomia/archive/2010/11/28/1890072.html  这篇文章很详细的解释了这几者的区别和联系。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  csv 乱码 java