本问题已经有最佳答案,请猛点这里访问。
我使用Java将一个SQL表导出到TXT中。除了一些字母上的重音符号的减号问题外,其他都可以。特别是我对"_"有问题,因为在我的TXT文件中,它被转换为"?""。我不知道为什么,但是如果我尝试导出包含该字段的表的记录(因此只写一条记录),就没有问题;如果我尝试导出整个表(数千条记录),就会出现这个问题。
我已经尝试过字符串类提供的替换方法,但结果相同。我还尝试使用Unicode中的che转义字符,但仍然存在相同的问题。有什么暗示吗?
编辑以下是我的代码:
if(array_query.equals(versamenti_tasi)) {
File myOutputDir = new File("C:\\comuni\\prova\\009_001_Versamenti");
if(!myOutputDir.exists())
myOutputDir.mkdir(); //Returns a boolean if you want to check it was successful.
PrintStream o = new PrintStream(myOutputDir +"\" + array_query[x].substring(26) +".txt");
System.setOut(o);
while (rs.next()) {
out ="";
final_index = 0;
for(int i =1; i <= rsmd.getColumnCount(); i++) {
if(rs.getString(i) == null) {
final_index += rsmd.getColumnDisplaySize(i);
out +="" + str_valore;
out = out.substring(0, final_index);
}else{
final_index += rsmd.getColumnDisplaySize(i);
out += rs.getString(i).trim() + str_valore;
out = out.substring(0, final_index);
}
}
System.out.println(out);
}
简单地说,写入部分在循环中;str_valore是一个250个字符的空字符串,这是因为我需要取该字段的db原始大小;rs是我的resultset,rsmd是元数据resultset。
那么,如何将这些表导出到文本文件?似乎您导出单个记录的方法在某种程度上使用了不同的编码来导出整个表。
它要么是用于数据库的编码,要么是用于输出文件的编码。
我不知道它是否相关,stackoverflow.com/questions/16208517/&hellip;
@Hulk我只是初始化一个新的printstream,并将其设置为默认输出,这样我就可以使用一个简单的system.out.println()。
请编辑这个问题,让我们知道你在做什么——在这两种情况下,一个有效,另一个无效。在某些地方有区别,但我们只能在看到代码的情况下发现它。
现在,我已经编辑了Eclipse编码首选项,将utf-8设置为文本文件编码;如果我使用.replace("&232;",'e')将起作用,但当然,如果我可以实现一个重音标记woold会更好。
"我对&232;有问题,因为在我的TXT文件中,文件被转换为&195;&168;。"我不知道为什么":因为字符编码不正确。
我不知道您更改了哪个Eclipse设置,但我怀疑这会影响您的PrintStream(它可能以utf-8读取/显示文件)。
要为您的PrintStream设置编码,请使用适当的构造函数:
更改此行
PrintStream o = new PrintStream(myOutputDir +"\" + array_query[x].substring(26) +".txt");
到
PrintStream o = new PrintStream(myOutputDir +"\" + array_query[x].substring(26) +".txt",
"UTF-8");
(或为数据库模式配置的任何编码。)
谢谢,这解决了我的问题。我在"首选项>常规>工作区-文本文件编码"下更改了设置,但正如您所说,这并不能解决问题。