用最初的心做永久的事 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 maccms影视模板 制作影视网站失败 求
  • ¥15 stm32按键设置闹钟数进退位不正常
  • ¥15 三电平逆变器中点电位平衡问题
  • ¥20 这怎么写啊 java课设
  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来