具有重音字符的URLConnection编码问题

时间:2013-11-28 12:55:03

标签: java url

我遇到了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。

有人知道如何面对这个问题吗?

1 个答案:

答案 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();