我正在为法国客户做一些工作,因此需要处理带重音符号的字符。但是我遇到了很多困难,希望解决方案很简单,并且有人可以向我指出。
字符串: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参数时,字符串格式错误。 (即request.getParameter(“string”)已包含格式错误的内容)。
我尝试了丹尼尔(Daniel)建议的元标记,但没有成功。我认为您处在正确的轨道上,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"?>
添加到页面的最开始。我非常接近解决方案。我发现,如果我从浏览器中更改页面的编码,则表单数据会正确地传递到服务器。我不知道如何使浏览器自动检测页面编码。
<?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" />
解决:我无法确定如何使浏览器自动检测Java默认使用的UTF-8编码。因此,我已使用request.setCharacterEncoding(“ISO-8859-1”)将字符编码强制为ISO-8859-1。
最佳答案
编辑:我发现仅从表单显示请求参数时,字符串格式错误。 (即request.getParameter(“string”)已包含格式错误的内容)。
这可能有三个原因:
URIEncoding
中HTTP Connector的Unicode - How to get characters right?属性设置为/conf/server.xml
。 UTF-8
做到这一点。 另请参见: