1

我有以下代码从文本文件中读取数据并打印到浏览器。但是当它获得像“abc - abc”这样的数据时,在浏览器中它会显示像“¬タモ”这样的垃圾字符......可能是什么问题?fis 指向文本文件。从文本文件中读取数据并写入浏览器。thnx 先进。

        f = new File(URLDecoder.decode(filePathStr), URLDecoder.decode(fileName));
        fis = new FileInputStream(f);
                    res.setHeader("Pragma", "no-cache");
        res.setHeader("Expires", "-1");
        res.setHeader("Cache-Control", "no-cache");
        req.setCharacterEncoding("UTF-8");
        res.setContentType("text/html;charset=UTF-8");
        out = res.getWriter();

        for (int i = fis.read(); i != -1; i = fis.read()) {
            if (i == '\n')
                out.print("</BR>");
            else
                out.write((byte) i);

        }
4

2 回答 2

0

您的文件可能不是 UTF-8。我会读取连接数组中所有字节的所有文件,然后用它创建一个字符串,然后我会打印它。

于 2012-09-06T08:02:59.607 回答
0

尝试手动输出一些东西,比如

out.print("υτφ-8 chars");

他们打印正确吗?如果不看看这篇文章如何让 UTF-8 在 Java webapps 中工作?并确保遵循有关如何在网页中显示 UTF-8 字符的 4 个步骤。

如果它们打印正确,那么问题在于 FileInputStream 以及您如何读取文件。

您可以尝试以下方法

FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis, "UTF8");

新更新

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        File f = new File("C:\\TEST.TXT");
        FileInputStream fis = new FileInputStream(f);
        InputStreamReader isr  = new InputStreamReader(fis, "UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Expires", "-1");
        response.setHeader("Cache-Control", "no-cache");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        out = response.getWriter();
        for (int i = isr.read(), k = 0; i != -1; i = isr.read(), ++k) {
            if (i == '\n') {
                out.print("</BR>");
            } else {
                out.write(i);
            }
            out.flush();
        }
    } finally {
        out.close();
    }
}

上面的代码应该可以正常工作,我已经测试过了

于 2012-09-06T09:43:14.060 回答