我正在为法国客户做一些工作,因此需要处理重音字符。但是我遇到了很多困难,我希望解决方案很简单,有人可以向我指出。
字符串: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”)已经有格式错误的内容。)
我尝试过丹尼尔建议的元标记但没有成功。我认为你是在正确的轨道上,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。
答案 0 :(得分:6)
编辑:我发现只是从表单中显示请求参数时字符串格式不正确。 (即,request.getParameter(“string”)已经有格式错误的内容。)
这可能有三个原因:
这是一个GET请求,服务器未配置为使用UTF-8来解析请求URI。目前还不清楚你正在使用哪个服务器,所以这里有一个以Tomcat为目标的答案:将URIEncoding
中/conf/server.xml
的{{1}}属性设置为UTF-8
。
如果是POST请求,则需要确保servletcontainer使用UTF-8对请求主体进行编码。您可以事先通过request.setCharacterEncoding("UTF-8")
执行此操作。
您正在编写参数的控制台不支持UTF-8。目前还不清楚你在谈论哪个控制台,所以这里有一个以Eclipse为目标的答案作为例子:在 Window&gt;偏好&gt;一般&gt;工作区&gt;文本文件编码将其设置为UTF-8。
另见:
答案 1 :(得分:1)
好的,第一个问题是你需要找出数据丢失的位置。
你还没有真正说哪里事情出错了,但我希望如果你整理出字符编码,其余部分就应该落实到位。 也许 SQLite有问题,但我对此表示怀疑......
答案 2 :(得分:1)
您需要确保发送回浏览器的HTML具有字符集。您应该将Content-Type: text/html; charset=UTF-8
作为HTTP响应标头和包含,作为head
标记的第一个子元素发回:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
或者,如果您使用的是XHTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
虽然只拥有meta
代码可以解决问题。
另外,请使用W3C Markup Validation Service确保您的HTML有效。
另请参阅:FAQ: Weird characters and question marks appear instead of accented characters
答案 3 :(得分:0)
字符串是否有可能,但您是否尝试使用en-us本地化打印这些字符?