我很难弄清楚如何处理这个问题:
我正在为一所意大利大学开发一个网络工具,我必须显示带有重音的单词(例如 è、ù、...);有时我从 PostgreSql 表(UTF8 编码)中得到这些词,但大多数情况下我必须从文件中读取长段落。这些文件被编码为 utf-8 xml,并在 Smultron 或任何 utf-8 编辑器中显示良好(它们是在 python 旧文件中使用实体è
而不是“è”来解析创建的)。
我编写了一个 java 类,它从 xml 文件中提取相关段,它的工作原理如下:
String s = parseText(filename, position)
如果我将返回的字符串写入文件,一切看起来都很好;问题是,如果我这样做
out.write(s)
在 jsp 页面中,我得到了奇怪的字符。顺便说一句,我用
String s = getWordFromPostgresql(...)
out.write(s)
在同一个jsp中,它显示OK。
有什么提示吗?
谢谢尼古拉
感谢您的回复,但是该指令已经在页面中,但它不起作用(实际上它“起作用”但仅适用于我从数据库中获取的字符串)。我认为从文件中读取有些东西,但我无法理解......它们在“java”中工作但不在“jsp”中(想不出更好的解释......)
这是从实际代码中提取的一个基本示例:从文件中读取的方法返回一个 Map,从 Mark(表示文本中位置的对象)到 String(包含文本):
这是在 .jsp 页面中(上面的帖子中引用了 utf 指令)
// ...
Map<Mark, String> map = TestoMarkParser.parseMarks(...);
out.write(map.get(m));
这是结果:
“Fu per√≤ cos√¨ in uso il Genere Enharmonico, che quelli quali vi si esercitavano”
如果我将相同的代码放在 java 类中,并用 System.out.println 替换 out.write,结果是这样的:
“Fu però così in uso il Genere Enharmonico, che quelli quali vi si esercitavano”
我一直在用十六进制编辑器做一些分析,这里是:
原始字符串:“fu però così”
ò 在 xml 文件中:C3 B2
ò 由 jsp 文件中的 out.write() 呈现:E2 88 9A E2 89 A4
ò 通过以下方式写入文件:
FileWriter w = new FileWriter(new File("out.txt"));
w.write(s); // s is the parsed string
w.close();
C3 B2
将每个字符的值打印为 int
0: 70 = F
1: 117 = u
2: 32 =
3: 112 = p
4: 101 = e
5: 114 = r
6: 8730 = �
7: 8804 = �
8: 32 =
9: 99 = c
10: 111 = o
11: 115 = s
12: 8730 = �
13: 168 = �
14: 10 = `