Java 导出CSV格式非常奇怪
我在干什么?我正在将sqlite数据库导出到csv中--至少我尝试 我已经手动和手动完成了这项工作 使用这两种方法,我得到了非常奇怪的结果。它们看起来格式不太好。列(通常用“,”?)分隔)和特殊字符(据说在opencsv中处理)看起来都不是应该的。代码:Java 导出CSV格式非常奇怪,java,android,opencsv,Java,Android,Opencsv,我在干什么?我正在将sqlite数据库导出到csv中--至少我尝试 我已经手动和手动完成了这项工作 使用这两种方法,我得到了非常奇怪的结果。它们看起来格式不太好。列(通常用“,”?)分隔)和特殊字符(据说在opencsv中处理)看起来都不是应该的。代码: CSVWriter writer = new CSVWriter(new FileWriter(file),'\n',','); String[] items = new String[11]; c.moveT
CSVWriter writer = new CSVWriter(new FileWriter(file),'\n',',');
String[] items = new String[11];
c.moveToFirst();
while(!c.isAfterLast()){
items[0] = c.getString(c.getColumnIndex(BaseColumns._ID));
items[1] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_QRCODE));
items[2] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_NAME));
items[3] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_AMOUNT));
items[4] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_UNIT));
items[5] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_PPU));
items[6] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_TOTAL));
items[7] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_COMMENT));
items[8] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_SHOPPING));
items[9] = c.getString(c.getColumnIndex(DepotTableMetaData.CREATED_DATE));
items[10] = c.getString(c.getColumnIndex(DepotTableMetaData.MODIFIED_DATE));
c.moveToNext();
writer.writeNext(items);
}
writer.close();
这一切的结果是:
我也通过FileWriter和StringBuffer完成了这项工作,但它似乎给出了完全相同的结果……如果您能帮助我,我将不胜感激;)
我查看了stackoverflow,但找不到任何匹配的问题/
编辑:是的,我知道我使用了“旧的,不推荐的”光标,但这不是问题所在。谢谢
编辑2:已解决!
您必须指定一些通用编码
CSVWriter writer = new CSVWriter(new OutputStreamWriter(new FileOutputStream(destination+"/output.csv"),"UTF-8"));
工作做得很好 您使用OpenCSV编写器,它将CSV文件中的一行作为字符串数组,并自动生成列和行之间的分隔符,但您不是让OpenCSV为您执行此操作,而是通过在单个字符串中附加行的所有值来显式执行此操作。显然,OpenCSV接受您的唯一值,并认为它包含一个列,其中必须对逗号和换行符进行编码
您应该使用字符串数组调用
writer.writeNext()
,数组中的每个字符串都是表中的单个单元格。编写器将为您生成逗号和换行符。您使用OpenCSV编写器,该编写器将CSV文件的一行作为字符串数组,并自动生成列和行之间的分隔符,但不是让OpenCSV为您生成分隔符,而是通过在单个字符串中附加行的所有值来显式生成分隔符。显然,OpenCSV接受您的唯一值,并认为它包含一个列,其中必须对逗号和换行符进行编码
您应该使用字符串数组调用
writer.writeNext()
,数组中的每个字符串都是表中的单个单元格。编写器将为您生成逗号和换行符。您使用的是csv库,但您自己添加了逗号…让我更新代码..您使用的是csv库,但您自己添加了逗号..让我更新代码..听起来不错,但不起作用。我得到的结果是link2。。不管怎么说,行的制作都是正确的,但列的制作却不正确。还有关于特殊角色的问题…:/CSVWriter writer=新的CSVWriter(新的OutputStreamWriter(新的文件OutputStream(destination+“/output.csv”),“UTF-8”);做这项工作。。。不过我还是会接受你,因为你也给了我一个提示!听起来不错,但没用。我得到的结果是link2。。不管怎么说,行的制作都是正确的,但列的制作却不正确。还有关于特殊角色的问题…:/CSVWriter writer=新的CSVWriter(新的OutputStreamWriter(新的文件OutputStream(destination+“/output.csv”),“UTF-8”);做这项工作。。。不过我还是会接受你,因为你也给了我一个提示!