如何防止写特殊字符

时间:2019-01-28 09:45:00

标签: java character-encoding

我正在使用Java将SQL表导出到txt中。除了减号问题(在某些字母上带有重音符号)外,其他所有功能都正常。 特别是我对“è”有疑问,因为在我的txt文件中将其转换为“Ô。 我不知道为什么,但是,如果我尝试导出包含该字段的表的记录(因此只写一条记录),就不会有问题。如果我尝试导出整个表(成千上万条记录),则会出现此问题。

我已经尝试过String类提供的replace方法,但结果相同。我也尝试在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是我的结果集,rsmd是元数据结果集

1 个答案:

答案 0 :(得分:1)

我不知道您更改了哪个Eclipse设置,但是我怀疑这会影响您的PrintStream(它可能以 reads / presents 文件作为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");

(或为数据库架构配置的任何编码。)