我遇到了URLConnection
编码试图发送文本的问题。
我的代码是:
final URL url = new URL(urlString);
final URLConnection urlConnection = url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
final DataOutputStream urlDataOut = new DataOutputStream(urlConnection.getOutputStream());
urlDataOut.writeBytes(prepareData.toString());
urlDataOut.flush();
urlDataOut.close();
我的prepareData.toString()
包含一个带有“è”的单词,一旦写入urlDataOut,它将包含带问号的钻石而不是“è”字母,并且写入状态为FAILURE。
有人知道如何面对这个问题吗?
答案 0 :(得分:4)
方法DataOutputStream.writeBytes
方法不适用于任何字符编码。它的文件说:
字符串中的每个字符按顺序写出,丢弃其高8位。
使用方法writeUTF
也不可行。它写入两个字节,其中包含编码String
(字节数)的长度,服务器在开头将其解释为字符。
因此,您应该使用标准方式将文字写入OutputStream
:
Writer w=new OutputStreamWriter(
urlConnection.getOutputStream(), StandardCharsets.UTF_8);
w.write(prepareData.toString());
w.flush();
w.close();