特殊和重音字符

klo*_*onq 3 java internationalization special-characters

我正在为法国客户做一些工作,因此需要处理重音字符.但是我遇到了很多困难,我希望解决方案很简单,有人可以向我指出.

字符串: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;
} 
Run Code Online (Sandbox Code Playgroud)

该项目使用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" />
Run Code Online (Sandbox Code Playgroud)

当重音字符被硬编码到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" />
Run Code Online (Sandbox Code Playgroud)

解决:我无法工作,如何让浏览器自动检测UTF-8编码的Java默认.所以我被迫使用request.setCharacterEncoding( "ISO-8859-1")字符编码为ISO-8859-1.

Bal*_*usC 6

编辑:我发现只是从表单中显示请求参数时字符串格式不正确.(即,request.getParameter("string")已经有格式错误的内容).

这可能有三个原因:

  1. 这是一个GET请求,服务器未配置为使用UTF-8来解析请求URI.目前还不清楚你正在使用的服务器,所以这里的一个Tomcat针对性的答案例如:设置URIEncoding的属性HTTP连接器/conf/server.xmlUTF-8.

  2. 如果它是一个POST请求,那么你需要确保servletcontainer使用UTF-8对请求主体进行编码.你可以request.setCharacterEncoding("UTF-8")事先做到这一点.

  3. 您正在编写参数的控制台不支持UTF-8.目前还不清楚你在谈论哪些控制台,所以这里是一个Eclipse的有针对性的答复,例如:在窗口>首选项>常规>工作空间>文本文件编码将其设置为UTF-8.

另见: