【问题标题】:Send UTF-8 string from Android to C#将 UTF-8 字符串从 Android 发送到 C#
【发布时间】:2016-03-26 07:12:32
【问题描述】:

我一直在尝试完成从我的 Android 应用程序到我的 C# 服务器(asmx 服务器)的简单文本传输,发送最简单的字符串 - 但由于某种原因它永远无法正常工作。我的 Android 代码如下(假设变量“消息”保存从 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 中的 BinaryBody 或不同的编码?)

【问题讨论】:

    标签: c# android utf


    【解决方案1】:

    问题出在以下几行:

    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")));
    

    【讨论】:

    • 非常感谢!非常快速和乐于助人:)
    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2020-07-31
    相关资源
    最近更新 更多