将 UTF-8 字符串从 Android 发送到 C#

Send UTF-8 string from Android to C#

我一直在尝试完成从我的 Android 应用程序到我的 C# 服务器(asmx 服务器)的简单文本传输,发送最简单的字符串 - 但由于某种原因它永远无法工作。我的 Android 代码如下(假设变量 'message' 保存从 EditText 接收的字符串,就我而言它是 UTF-16):

httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(POST_MESSAGE_ADDRESS);
byte[] messageBytes = message.getBytes("utf-8");
builder.addPart("message", new StringBody(messageBytes.toString()));
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = httpClient.execute(post);

所以我得到了一些简单的消息,比如说一个 10 字节的数组。在我的服务器中,我有一个功能设置为该特定地址;它的代码是:

string message = HttpContext.Current.Request.Form["message"];
byte[] test = System.Text.Encoding.UTF8.GetBytes(message);

现在,在该行之后,字节数组 ('test') 的值与我在应用程序中调用的 ToString() 函数的结果完全相同。问题是,如何将其转换为普通的 UTF-8 文本以显示?

注意:我试过将字符串作为字符串内容正常发送,但据我所知,默认编码是 ASCII,所以我遇到了很多问号。

编辑:现在我正在寻找一些转换解决方案并尝试它们,但我的问题也是是否有更简单的方法来做到这一点(也许 android,还是不同的编码?)

问题出在以下几行:

byte[] messageBytes = message.getBytes("utf-8");
builder.addPart("message", new StringBody(messageBytes.toString()));

首先,您将 UTF-16 字符串 message 转换为 UTF-8 编码的 messageBytes 只是为了在下一行将它们转换回 UTF-16 字符串。并且您正在使用 StringBody 构造函数,该构造函数将默认使用 ASCII 编码。

您应该将这些行替换为:

builder.addPart("message", new StringBody(message, Charset.forName("UTF-8")));