【问题标题】:How can i send Emoji with Http POST request如何使用 Http POST 请求发送表情符号
【发布时间】:2018-05-01 05:44:49
【问题描述】:

我有一个应用程序通过 http 请求将数据发送到 MySQL 服务器,但是 在服务器显示“??????”而不是表情符号。 当我在服务器中插入数据手册时,表情符号没有问题。 (排序规则 = utf8mb4_general_ci)

我在android中发送数据的代码:

public static String sendData(String Address, HashMap hashMap)
{
    try
    {
        Object[] keys = hashMap.keySet().toArray();
        Object[] values = hashMap.values().toArray();

        String data = Utils.Encoder(keys[0].toString(), values[0].toString());
        for (int i = 1; i < hashMap.size(); i++)
        {
            data+= "&" + Utils.Encoder(keys[i].toString(), values[i].toString());
        }




        URL url = new URL(Address);

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();


        connection.setRequestMethod("POST");
        connection.setRequestProperty("USER-AGENT", "Mozilla/5.0");
        connection.setRequestProperty("ACCEPT-LANGUAGE", "en-US,en;0.5");
        connection.setDoOutput(true);
        DataOutputStream dStream = new DataOutputStream(connection.getOutputStream());
        dStream.writeBytes(data);
        dStream.flush();
        dStream.close();

        BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line = "";
        StringBuilder responseOutput = new StringBuilder();

        while ((line = br.readLine()) != null)
        {
            responseOutput.append(line);
        }
        br.close();

        return responseOutput.toString();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return null;
}

public static String getData(String Address)
{
    URL url = null;
    try
    {
        url = new URL(Address);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setRequestProperty("USER-AGENT", "Mozilla/5.0");
        connection.setRequestProperty("ACCEPT-LANGUAGE", "en-US,en;0.5");

        InputStream in = connection.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line = "";
        StringBuilder responseOutput = new StringBuilder();
        while ((line = br.readLine()) != null)
        {
            responseOutput.append(line);
        }
        br.close();
        return responseOutput.toString();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return "";
}

public static String Encoder(String key, String value)
{

    try
    {
        return URLEncoder.encode(base64Key, "UTF-8") + "=" + URLEncoder.encode(base64Value, "UTF-8");
    }
    catch (UnsupportedEncodingException e)
    {
        e.printStackTrace();
    }

    return "";
}
}

我认为我的编码器有问题,所以我使用 Base64 方法而不是 UTF-8:

public static String Encoder(String key, String value)
{

    byte[] valueBytes =  value.getBytes();
    byte[] keyBytes =  key.getBytes();
    return Base64.encodeToString(valueBytes,Base64.DEFAULT) + "=" + Base64.encodeToString(keyBytes,Base64.DEFAULT);

    }

但是当我使用它时,服务器中不会​​显示任何内容。

这是我的 php 代码:(不是全部代码)

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset('utf8mb4');

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}


if (!$conn->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
$conn->character_set_name();
}

$alias=$_POST['Alias'];
$text=$_POST['Text'];

已编辑: 我想发送带有波斯字符的数据

【问题讨论】:

    标签: android mysql http-post


    【解决方案1】:

    我希望这对你有用。

    如下更改服务器连接排序规则

    Collation = utf8mb4_unicode_ci
    

    然后不带编码发送。

    【讨论】:

    • 我测试你的建议。当我使用带有编码器的 utf8mb4_unicode_ci 时不再工作,但是当我在没有编码器的情况下发送时在服务器中显示不清楚的数据。示例:“?”=“=”。所以没用。
    【解决方案2】:

    在 php 代码中,我应该使用 utf8mb4 来表示字符集:

    if (!$conn->set_charset("utf8mb4")) {
        printf("Error loading character set utf8: %s\n", $mysqli->error);
    } else {
        $conn->character_set_name();
    }
    

    一切都是正确的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      相关资源
      最近更新 更多