1

我的应用程序有一个 Java servlet,它从请求中读取一个 JSONObject 并构造一些在其他地方使用的 Java 对象。我遇到了一个问题,因为 JSON 中有以 ISO-8859-1 编码的字符串。当我将它们提取到 Java 字符串中时,编码似乎被解释为 UTF-16。我需要能够在某个时候取回正确编码的字符串以放入另一个 JSON 对象。

我尝试过使用 ByteBuffers 和 CharBuffers,但我根本没有得到任何字符。我无法更改编码,因为我必须与使用 ISO-8859-1 的其他应用程序很好地配合使用。

任何提示将非常感谢。

这是一个使用 Struts 1.3.8 的遗留应用程序。我将 net.sf.json 2.2.4 用于 JSONObject 和 JSONArray。

解析代码的片段是:

final JSONObject a = (JSONObject) i;
final JSONObject attr = a.getJSONObject("attribute");
final String category = attr.getString("category");

final String value = attr.getString("value");

然后,我使用该信息创建 POJO,这些信息由另一个操作类检索以创建 JSON 以传递给客户端进行显示,或传递给其他应用程序。

所以澄清一下,如果 JSON 包含字符串“Juan Guzmán”,Java 字符串包含类似 Juan Guzm?_An 的内容(我面前没有确切的内容)。我不确定如何获得正确的变音符号。我相信,如果我能获得一个包含正确表示的 Java 字符串,那么 Mezzie 的解决方案(如下)将允许我创建具有正确编码的字符串以放回 JSON 中以返回。

4

1 回答 1

0

我有同样的问题,我使用的技术和你一样。在我们的例子中,它是 UTF 8。所以只需将其更改为 UTF-16

    public static String UTF8toISO( String str )
    {
        try
        {
            return new String( str.getBytes( "ISO-8859-1" ), "UTF-8" );
        }
        catch ( UnsupportedEncodingException e )
        {
            e.printStackTrace();
        }
        return str;
    }
于 2012-11-27T21:36:02.267 回答