簡體   English   中英

用java編碼的json字符串無法用php解碼

[英]with java encoded json string fails to decode with php

我真的很想用Java和PHP編碼字符串。
我使用Java管理Wordpress中的帖子。 為此,我在JavaFX中創建了一個GUI,並擴展了REST-API以創建SEO插入。 Worpdress數據庫使用utf8_general_ci編碼。
我通過Post將數據作為JSON編碼的字符串發送到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對其進行編碼,如此處所述, 將Java字符串從/轉換為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用於Java。

使用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。 但是在您的問題中,這種方式似乎更清晰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM