我有一个自定义的json请求类,可以在Android应用程序中将多部分文件上传到服务器这个类,当我添加英文单词作为键和值(这些键和值是一部分)时它可以正常工作但是当我使用时任何阿拉伯语单词,它都会写出“D * F * 9”等未知单词。 我应该更改所有部分的内容类型还是我可以让每个部分都有其内容类型? 任何帮助PLZ?
在将这些值写入ByteArrayOutputStream对象之前,每件事都可以正常工作,我可以看到阿拉伯语单词。
这是所有类的@Override
public String getBodyContentType() {
return "multipart/form-data;charset=UTF-8;boundary=" + boundary;
//return "application/json; charset=UTF-8";
//return "multipart/form-data; charset=UTF-8";
}
以下是构建文本部分的构建文本部件方法 private void buildTextPart(DataOutputStream dataOutputStream, String parameterName, String parameterValue) throws IOException {
dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd);
//dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + parameterName + "\"" + lineEnd);
dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + parameterName + "\"" + lineEnd);
dataOutputStream.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
//dataOutputStream.writeBytes("Content-Type: application/json; charset=UTF-8" + lineEnd);
Log.d("inside buildText", parameterName + " " + parameterValue);
dataOutputStream.writeBytes(lineEnd);
dataOutputStream.writeBytes(parameterValue + lineEnd);
}
这里我用来调试这些值的代码是// just for debugging
DataInputStream in = new DataInputStream(new ByteArrayInputStream (bos.toByteArray()));
Scanner scanner = new Scanner(in);
while (scanner.hasNext()){
Log.d("scanner ", scanner.next());
}
我已阅读此RFC document但我无法理解Content-Disposition的用途及其值的含义是什么。
我应该在此代码中编辑什么才能正确获取阿拉伯语值?
答案 0 :(得分:1)
最后我找到了答案,问题出在这一行上
dataOutputStream.writeBytes(parameterValue + lineEnd);
所以我将其更新为
dataOutputStream.write(parameterValue.getBytes("utf-8"));
dataOutputStream.writeBytes(lineEnd);
获取所有非ASCII字符,现在它适用于所有语言。