我正在尝试将表单数据从 Android 应用程序传输到 NodeJs 服务器。我的客户端代码如下(可以包含 UTF-8 字符的字符串是 的值params
):
final HttpPost post = new HttpPost(url);
final MultipartEntityBuilder mpb = MultipartEntityBuilder.create()
.setCharset(Charset.forName("UTF-8")) // tried with or without this line
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // tried with or without this line
for (final Entry<String, String> e : params.entrySet()) {
mpb.addTextBody(e.getKey(), e.getValue());
}
post.setEntity(mpb.build());
final HttpClient httpClient = new DefaultHttpClient();
final HttpResponse response = httpClient.execute(request);
我的服务器代码如下:
app.post('/accesspoint', function(req, res) {
var body = req.body;
var form = new formidable.IncomingForm();
form.encoding = 'utf-8';
form.parse(req, function(err, fields, files) {
console.log(fields);
...
当我的输入 javaparams
有一个包含 UTF-8 字符的值时,我得到的服务器端的日志会打印没有这个字符的相应值,所以它在某些时候有点被吞没。例如,如果我的输入字符串是"ê"
,那么我的服务器日志将打印一个""
值。
当我读到它是发送可以包含非 ASCII 字符的数据的最佳方式时,我使用了多部分表单。Formidable 显然也是处理包含 UTF-8 字符的表单的最佳节点包。
我的客户端使用 Apache HttpClient 4.3.3。
我究竟做错了什么?