我真的很难用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。
答案 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。但在你的问题的背景下,这种方式似乎更清楚。