我是Java的新手,我需要使用Java将xml保存到csv,但是问题是我不能使用CSVWriter,因为在xml中也有UTF8编码的数据。
因此,我发现可以使用outputstreamwriter,它可以用UTF8进行编码。
对于字符串,一切正常,但对于整数,我无法获取正确的数字。
示例代码:
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.*;
public class UTF8WriterDemo {
public static void main(String[] args) {
Writer out = null;
try {
out = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("c://java2//file.csv"), "windows-1250"));
//for (int i=0; i<4; i++ ) {
String text = "This tečt will be added to File !!";
int hu = 4;
out.write('\ufeff');
out.write(text+ '\n');
out.write(hu+ '\n');
//}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我得到的是图片而不是数字。 我想这是因为:
OutputStreamWriter是从字符流到字节流的桥梁:使用指定的字符集将写入其中的字符编码为字节。它使用的字符集可以通过名称指定,也可以显式指定,或者可以接受平台的默认字符集。
这就是为什么显示不正确的原因。
因此,我想问一下,是否可以使用outputstreamwriter显示整数?
或者,如果没有,如何使用Java将UTF8编码字符转换为CSV数据?
谢谢
答案 0 :(得分:0)
Java在使用双引号和单引号之间有区别。
"foo"
是一个字符串。'f'
是一个字符(或字符)'foo'
将引发异常,因为您在char中只能包含1个字符。 '\n'
也是1个字符,特别是换行符。加一个数字和一个字符将把数字用作ASCII值并使用相应的字符,然后将两个字符组合成一个String(或字符数组,即char [])。
使用双引号可以解决您的问题。
答案 1 :(得分:0)
import java.io.*;
public class UTF8WriterDemo {
public static void main(String[] args) {
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file.csv"), "windows-1250"));
//for (int i = 0; i < 4; i++) {
String text = "This text will be added to File !!";
int hu = 4;
String text2 = new String("" + hu);
out.write('\ufeff');
out.write(text + '\n');
out.write(text2 + '\n');
// }
out.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("The process is completed.");
}
}
}
答案 2 :(得分:0)
实际上我需要重写此构造:
FileWriter fileWriter = new
FileWriter("C:\\java\\test\\EEexample3.csv");
CSVWriter csvWriter = new CSVWriter(fileWriter);
csvWriter.writeNext(new String[] {
..
..
..
..
}
.. code ..代码..
String homeCurrencyPriceString = iit.getHomeCurrency().getPrice()!=null?iit.getHomeCurrency().getPrice().toString():"";
String headerDateString = invoiceHeaderType.getDateTax()!=null?invoiceHeaderType.getDateTax().toString():"";
String invoiceTypeString = invoiceHeaderType.getInvoiceType()!=null?invoiceHeaderType.getInvoiceType().value():"";
String headeraccountno= invoiceHeaderType.getAccount().getAccountNo()!=null?invoiceHeaderType.getAccount().getAccountNo().toString():"";
String headertext = invoiceHeaderType.getText()!=null?invoiceHeaderType.getText():"";
String invoiceitemtext= iit.getText()!=null?iit.getText():"";
String headericdph = invoiceHeaderType.getPartnerIdentity().getAddress().getIcDph()!=null?invoiceHeaderType.getPartnerIdentity().getAddress().getIcDph():"";
String symVar = invoiceHeaderType.getSymVar()!=null?invoiceHeaderType.getSymVar():"";
csvWriter.writeNext(new String[] {
invoiceHeaderType.getPartnerIdentity().getAddress().getIco(), headericdph, invoiceHeaderType.getPartnerIdentity().getAddress().getCompany(),symVar, invoiceHeaderType.getId().toString(), iit.getId().toString(), homeCurrencyPriceString, detailcentreString,headercentreString, headerDateString, invoiceTypeString,headeraccountno, headertext,invoiceitemtext
});
对象由xml填充
输出outputwriter的构造。 因此,首先,我尝试将outputstream作为简单的代码,以确保其正常工作,然后在工作时,我想重写整个代码。
使用CSVwriter一切都可以顺利进行,只是现在添加了以UTF8 / windows1250编码的文本:(因此,我需要修复代码的构造。
偶数对象(例如price)都使用.toString()进行转换,因此也许可以不带int来使用。
我希望outputstreamwriter的作家能够做必要的事情。 我要尝试。