rush2012 2008-06-24 08:54
浏览 178
已采纳

如何显示出Unicode文件中的汉字

我想把一个包含汉字Unicode编码的文件uni.txt用Java读取出来,并正确显示中文,请问该如何做呢。我使用FileInputStream和DataInputStream都没有读取成功。请大家指点一下。

uni.txt包含这样的内容:
table.rows.length; //\u8868\u683c\u603b\u884c\u6570
tableModel_arr[tib].pg.perPageCount; //\u6bcf\u9875\u8bb0\u5f55\u6570
tableModel_arr[tib].pg.page;//\u5f53\u524d\u7b2c\u51e0\u9875
。。。。。。

我单独用System.out.println("table.rows.length; //\u8868\u683c\u603b\u884c\u6570")能打印汉字;但一旦用输入流就不行了。
[b]问题补充:[/b]


感谢大家,面对大家的热情,如果我不说两句的话,我心里会憋得难受的。

以前我在其它网站提问题,不是很久没有回复,就是答非所问;在JavaEye我也是第一次提问,本是抱着试试的心里,没想到各位真是够哥们,有建议,也有代码,我都不晓得如何感激了。

祝各位前途似锦,祝JavaEye越办越火!

  • 写回答

5条回答 默认 最新

  • zhupanos 2008-06-24 12:17
    关注

    代码大概如下:

    [code="java"]
    import java.io.*;

    public class ReadTxtFile {
    public static void main(String[] s) throws IOException {
    new ReadTxtFile().readTxtFile("C://uni.txt");
    }

    private void readTxtFile(String fileName) throws IOException {
        File file = new File(fileName);
        FileInputStream fin = new FileInputStream(file);
        InputStreamReader read = new InputStreamReader(fin, "utf-8");
        BufferedReader reader = new BufferedReader(read);
        String content = reader.readLine();
        while (content != null) {
            char[] c = content.toCharArray();
            char[] out = new char[c.length];
            System.out.println(loadConvert(c, 0, c.length, out));
            content = reader.readLine();
        }
        read.close();
        reader.close();
        fin.close();
    }
    
    private String loadConvert(char[] in, int off, int len, char[] convtBuf) {
        if (convtBuf.length < len) {
            int newLen = len * 2;
            if (newLen < 0) {
                newLen = Integer.MAX_VALUE;
            }
            convtBuf = new char[newLen];
        }
        char aChar;
        char[] out = convtBuf;
        int outLen = 0;
        int end = off + len;
    
        while (off < end) {
            aChar = in[off++];
            if (aChar == '\\') {
                aChar = in[off++];
                if (aChar == 'u') {
                    int value = 0;
                    for (int i = 0; i < 4; i++) {
                        aChar = in[off++];
                        switch (aChar) {
                            case '0':
                            case '1':
                            case '2':
                            case '3':
                            case '4':
                            case '5':
                            case '6':
                            case '7':
                            case '8':
                            case '9':
                                value = (value << 4) + aChar - '0';
                                break;
                            case 'a':
                            case 'b':
                            case 'c':
                            case 'd':
                            case 'e':
                            case 'f':
                                value = (value << 4) + 10 + aChar - 'a';
                                break;
                            case 'A':
                            case 'B':
                            case 'C':
                            case 'D':
                            case 'E':
                            case 'F':
                                value = (value << 4) + 10 + aChar - 'A';
                                break;
                            default:
                                throw new IllegalArgumentException(
                                        "Malformed \\uxxxx encoding.");
                        }
                    }
                    out[outLen++] = (char) value;
                } else {
                    if (aChar == 't')
                        aChar = '\t';
                    else if (aChar == 'r')
                        aChar = '\r';
                    else if (aChar == 'n')
                        aChar = '\n';
                    else if (aChar == 'f')
                        aChar = '\f';
                    out[outLen++] = aChar;
                }
            } else {
                out[outLen++] = (char) aChar;
            }
        }
        return new String(out, 0, outLen);
    }
    

    }
    [/code]

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

报告相同问题?

悬赏问题

  • ¥15 对于这个复杂问题的解释说明
  • ¥50 三种调度算法报错 采用的你的方案
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败