【问题标题】:Handling Spanish characters in Java/JSP在 Java/JSP 中处理西班牙语字符
【发布时间】:2010-07-05 21:49:07
【问题描述】:

我有一个处理大量西班牙语文本的小型 web 应用程序。

在代码中的某个位置,JSP 页面以包含此文本的 Json String 响应。如果我将String 打印到控制台,它看起来像乱码。但是,如果我在 Chrome 开发人员工具中检查响应的标题/内容,它看起来是正确的。它以正确的编码传输。 webapp 的这一部分按预期运行。

在代码的另一点,不同的JSP 页面以HTML 响应。其中一些HTML 包含更多的西班牙语文本。这一次,文本被传输(并显示)为乱码。

发生这种情况的潜在原因是什么?这两次,我只是使用out.print 打印文本。为什么它在某一时刻有效,而在另一时刻无效?

示例:

// In a file who's only output is the json string
String jsonString = ...
System.err.println(jsonString); // prints jibberish
out.println(jsonString); // looks correct when the response is viewed in Chrome Developer tools, and looks correct in a browser

...

// In a file who's output is a complete html page
String spanishText = ...
out.println("<label>" + spanishText + "</label>"); // looks like jibberish when the response is viewed in Chrome developer tools, and shows up as jibberish in a browser

【问题讨论】:

    标签: java jsp tomcat character-encoding tomcat6


    【解决方案1】:

    您需要设置 JSP/Servlet 响应应该使用的编码来打印字符并指示网络浏览器使用相同的编码。

    这可以通过将它放在您的 JSP 顶部来完成:

    <%@ page pageEncoding="UTF-8" %>
    

    或者,如果您实际上是在 Servlet 中执行此操作:

    response.setCharacterEncoding("UTF-8");
    

    使用System.err 时的“乱码”是另一个问题。您需要设置用于打印此信息的控制台/日志文件的编码。如果是例如 Eclipse,那么您可以通过 Window > Preferences > General > Workspace > Text File Encoding 进行设置。

    另见:

    【讨论】:

    • 我试过这个,但它似乎不起作用。如果我在 Chrome 中查看请求标头,Content-Type 指定正确(text/html;charset=UTF-8),但如果我查看请求内容,它仍然是乱码(即útiles 而不是útiles),它显示作为浏览器中的乱码。
    • pageEncoding="UTF-8" 也很重要。当您使用FileReader/FileInputStream 左右从其他来源读取字符串时,您还需要考虑其编码。另请参阅链接文章的this chapter。从上到下阅读它,您会更好地理解“幕后”发生的事情。这种理解对于解决问题非常重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2023-03-18
    • 1970-01-01
    • 2023-03-31
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多