Tom*_*mmy 0 java linux unicode servlets character-encoding
我有一个Java servlet,它获取RSS feed将它们转换为JSON.它在Windows上运行良好,但在Centos上失败了.
RSS源包含阿拉伯语,它在Centos上显示难以理解的字符.我正在使用这些行来编码RSS提要:
byte[] utf8Bytes = Xml.getBytes("Cp1256");
// byte[] defaultBytes = Xml.getBytes();
String roundTrip = new String(utf8Bytes, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
我在Glassfish和Tomcat上尝试过它.两者都有同样的问题; 它适用于Windows,但在Centos上失败.这是怎么造成的,我该如何解决?
byte[] utf8Bytes = Xml.getBytes("Cp1256");
String roundTrip = new String(utf8Bytes, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
这是尝试纠正错误解码的字符串.在此操作之前的某个时刻,您已Xml使用默认编码读入,该编码在Windows框中为代码页1256(Windows阿拉伯语).在这里,您将该字符串编码回代码页1256以检索其原始字节,然后将其正确解码为您实际需要的编码UTF-8.
在Linux服务器上,它失败了,因为默认编码不是Cp1256; 在未安装在阿拉伯语语言环境中的任何Windows服务器上也会失败.
使用默认编码而不是显式编码的注释掉的行Cp1256更有可能在Linux服务器上运行.但是,真正的解决方法是找到Xml正在读取的位置,并修复该操作以使用正确的编码(*)而不是默认编码.允许使用默认编码几乎总是一个错误,因为它使应用程序依赖于服务器之间不同的配置.
(*:对于这个feed,这是UTF-8,这是最常见的编码,但它可能因其他人不同.找到正确的feed编码取决于Content-Type为资源和<?xml encoding声明返回的头.到目前为止最好处理这个问题的方法是使用一个知道这个的适当的XML库来获取和解析资源,例如DocumentBuilder.parse(uri).)
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |