JavaServlet : How to handle unknown encodings?

标签 java encoding servlets

当某个用户尝试查看我们的网页时,当我们调用response.getWriter()时,会抛出带有消息“charsetName”的NullPointerException。我反编译了我们的 Web 服务器的响应类(JRun 3.1),发现执行此操作时会抛出此错误:

s = getCharacterEncoding(); // returns 'x-mac-roman' I believe
try
{
    outWriter.exchangeWriter(new OutputStreamWriter(bufStream, s));
}
catch(UnsupportedEncodingException unsupportedencodingexception)
{
    s = MIME2Java.convert(s); // looks like this returns null
    outWriter.exchangeWriter(new OutputStreamWriter(bufStream, s)); // NPE!!!
}

当我强制浏览器发送“Accept-Charset=x-mac-roman,utf-8”的请求 header (用户浏览器似乎就是这样做的)时,我终于能够重现此错误。

这是网络服务器代码,因此我无法在此处进行任何更改,但我们可以采取一些措施来确保这种情况永远不会发生。我们可以明确强制网络服务器使用某种编码而不是根据请求来决定吗?

最佳答案

MacRoman 是一种“国际字符集”,并不总是由 Sun Java 安装程序安装,因此不可用于程序。

根据http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.html如果安装程序确定它是“欧洲”操作系统,则不会完成此操作。

如果您重新安装 Sun Java 并请求在自定义安装中支持非欧洲语言,则应更正此问题。

关于JavaServlet : How to handle unknown encodings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/957097/

相关文章:

java - 单个 weblogic 容器中的 Web 应用程序的单独 log4j2 文件

java - 单击任何按钮时如何显示正在加载的 gif

java - 更改 Java Android 中的 UI

PHP + MySQL + 西类牙语

linux - ffmpeg 关闭并返回代码 137

java - 在 Maven 项目中更改编码(CP-1252 到 UTF-8)时,我应该如何处理编码为 iso-8859-1 的 XML 文件

mysql - "Confirm Form Resubmission"问题。 MVC servlets JSP javabean

java - 在 jdk 1.7 上交叉编译 : jdk1. 6

java - 在java中减少JPG文件的文件大小

Java 无法打开文件名中包含替代 Unicode 值的文件?