字符串:
La Forêt pour Témoin
被转换为:La For? pour T?oin
请注意,重音符号后面缺少一个字符——在ê后面缺少t,在é后面缺少m。我尝试使用StringEscapeUtils来转义一些字符,例如ă。我还编写了自己的转义函数,产生了相同的结果(ă可以工作,ê不能)。
private String escapeChars(String string) {
char[] chars = string.toCharArray();
String result = "";
for (int i = 0; i < chars.length; i++) {
int c = chars[i];
result += "&#" + c + ";";
}
return result;
}
该项目正在使用App Engine插件在eclipse中运行,我无法确定问题是由Java、App Engine还是SQLite引起的。
任何帮助将不胜感激。
编辑:我发现当简单地显示来自表单的请求参数时,字符串会出现格式不正确的情况。 (例如,request.getParameter("string")已经具有格式不正确的内容)。
我已经尝试了Daniel建议的meta标签,但没有成功。 不过我认为你正走在正确的轨道上,HTML文档的标头数据如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
当在JSP中硬编码带有重音符号的字符时,它们会按预期显示。
编辑:我还在页面开头添加了。
我离解决方案非常接近。我发现如果我从浏览器中更改页面的编码方式,表单数据会正确传递到服务器。我无法弄清楚如何使浏览器自动检测页面编码。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
已解决:我无法弄清楚如何使浏览器自动检测 UTF-8 编码,而 Java 默认使用此编码。因此,我强制将字符编码设置为 ISO-8859-1,使用 request.setCharacterEncoding("ISO-8859-1")。
<?xml version="1.0" encoding="UTF-8"?>
,注意不要在前面加任何空格;这些必须是 XHTML 文档中的第一个字符。 - Daniel Trebbien