首先让我展示代码:
Java类:
package test;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Reader {
public static void main(String[] args) {
show("test.txt");
}
public static void show(String fileName) {
StringBuilder data = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
while (reader.ready())
data.append(reader.readLine()).append("\n");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(data);
for (int i=0; i<data.length(); i++)
System.out.println(data.codePointAt(i));
}
}
JSP:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page pageEncoding="UTF-8"%>
<%@ page import = "test.*" %>
<html>
<head></head>
<body>
<% Reader.show("test.txt"); %>
</body>
</html>
测试文件 test.txt 采用UTF-8 with BOM
编码,包含四个可见字符:&#34; TEST&#34;。您可以自己创建或下载here。
Reader类只显示文件每个字符的内容和代码点
也就是说,它应该打印TEST
和代码点65279 84 69 83 84 10
,其中65279
是BOM字符,10
是新行字符。
但是,我在JSP中执行相同的代码,输出为嚜燜EST
,代码点为22172 29148 69 83 84 10
。这很奇怪,我无法弄清楚原因。
答案 0 :(得分:0)
我认为这应该是一个字符集问题,将这行代码添加到show()
:System.out.println(Charset.defaultCharset().name());
的开头。运行Reader类和JSP页面以检查是否存在任何差异。
<强>更新强>:
我已经下载了您的test.txt
文件,并在Mac OS X下使用JDK 1.8.0_45,Tomcat 8.0.32测试了您的代码,两者都提供了相同的输出。