用最初的心做永久的事 2011-08-17 22:38
浏览 241
已采纳

Java编码的相关问题

今天在写代码的过程中遇到一个问题,跟大家讨论讨论.
properties配置文件中的中文注释全是ascii码形式的,看不懂,就想写段代码来转换成gbk或utf-8形式的中文:

public static String ascii2ChineseDesc(String asciiStr){
   if(asciiStr==null){
        return "传入的字符串为空!";
    }
    return new String(asciiStr.getBytes());
}
在调用传参的时候传入ascii码字符串参数,能正确显示为中文.就这样凑合用着.
后来发现配置文件中的中文注释太多,这样一段一段的转换太费时了,所以干脆就用io流来读取配置文件,每读一行就调用

上面的方法一次来转换成中文.

while ((res = reader.readLine()) != null) {
buf.append(new String(res.getBytes()) + "\n");
}
最后打印buf.toString()时,那些ascii码没有被转换成中文.试了一些方法都不行,如果你直接给定一个字符串,比如
String str = "\u5206\u5272";
然后System.out.println(new String(str.getBytes()));它还是能转换成中文,但是只要是通过BufferedReader读出来的
就是转换不了.我想是不是由于properties文件编码的问题(默认是:ISO-8859-1),目前还没有解决这个问题.希望在论坛上大家都能
讨论一下.
IO流读取源码:
public static String getPropFileChineseDES(String fileName) {

    /**
     * 把字节流转换为字符流,InputStreamReader是字节流与字符流转换的桥梁
     */
    InputStream stream = CommonDemo.class.getClassLoader().getResourceAsStream(fileName);
    InputStreamReader in = new InputStreamReader(stream);
    BufferedReader reader = new BufferedReader(in);
    BufferedWriter writer = null;

    String res = "---------------------------文件[" + fileName+ "]---------------------------\n";
    StringBuffer buf = new StringBuffer(res);
    try {
        File f = new File("info.txt");
        writer = new BufferedWriter(new FileWriter("info.txt"));//相对路径:相对于工程根目录来说
        while ((res = reader.readLine()) != null) {
            buf.append(new String(res.getBytes()) + "\n");
        }
        writer.write(buf.toString());
        writer.flush();
        System.out.println(f.getAbsolutePath());
    } catch (IOException e) {
        e.printStackTrace();
        return e.getMessage();
    }finally{
        try {
                if(reader!=null){
                    reader.close();
                }
                if(writer!=null){
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
    return buf.toString();
}
  • 写回答

3条回答 默认 最新

  • 也许世界还没停 2011-08-19 10:04
    关注

    这是由于properties文件中存的不是中文,就是英文字符“\u5206\u5272”

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器