[英]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.