用java编码的json字符串无法用php解码

时间:2017-01-29 02:50:48

标签: java php json utf-8 character-encoding

我真的很难用Java和PHP编写字符串 我使用Java来管理Wordpress中的帖子。为此,我在JavaFX中创建了一个GUI,并扩展了REST-API以创建SEO插入。 Worpdress数据库使用utf8_general_ci编码 我通过Post将数据作为JSON编码的String发送到WP-Api。我使用org.JSON。用Java解码/编码 我试图用php解码json-string,

  

json_decode($ request-> get_param('data'),true);

但我得到以下错误:

  

格式错误的UTF-8字符,可能编码错误

所以我试着用php转换它

  

$ s = iconv(“Windows-1252”,“UTF-8”,$ s);

它有效,但像“ä,ö,ü,ß”等字符只显示为Ã,Ã,......

接下来我尝试用Java编码,如Converting Java String From/to utf-8

所述
private String convertToUTF8(String s) {
    String out = null;
    try {
        out = new String(s.getBytes("UTF-8"), "ISO-8859-1");
    } catch (java.io.UnsupportedEncodingException e) {
        return null;
    }
    return out;
}

但是,如果没有“iconv”,它就会再次失败。

我做错了什么,我该如何解决?

服务器运行php7.0。我使用jdk1.8.0_66 for Java。

1 个答案:

答案 0 :(得分:1)

使用String对象分配加密是一个常见错误。 String应该是对编码这样的实现细节的抽象。只要您只使用String,您需要知道的只是它们是Unicode。只有当您将String转换为字节时,特定的编码才会发挥作用,在您的情况下,这可能意味着在某些HTTP客户端中。我不知道你使用了什么,所以我附上了一个来自Apache的例子。

public void sendMessage(CloseableHttpClient client, String endpointUrl, String jsonString) throws IOException {
    HttpPost post = new HttpPost(endpointUrl);
    post.addHeader("Content-Type", "application/json; charset=utf-8"); // Apache would probably set it for you, but since I'm not 100% sure, I added it here.
    post.setEntity(new StringEntity(jsonString, ContentType.create("application/json", Consts.UTF_8))); // here the actual conversion takes place and only here do you need to worry about encoding
    try (CloseableHttpResponse response = client.execute(post)) {
        // act on response here
    }
}

备注1 :这个例子只是:一个例子,意在说明一个观点。我还没有测试过,我也不太了解Apache HTTP客户端,所以要小心。

备注2 :您似乎可以使用ContentType APPLICATION_JSON代替ContentType.create("application/json", Consts.UTF_8) - 它默认使用UTF-8。但在你的问题的背景下,这种方式似乎更清楚。