如何把中文保存到ASCII码

因为OSC在发送字符串的时候,会把字符串转为ASCII码发送,这样在字符串中有中文的时候,OSC接收到字符中文从ASCII码转为UTF-8的时候就会出现乱码。

需要解决的问题是,如何把中文的字符串转为ASCII码。并且保留中文的字节码?

因为ASCII码是使用单字节保存的,而UTF-8是使用双字节保存,那么把中文字符转成字节保存ASCII码的字符串中,转换的时候从ASCII码的字符串中取出双字节转成一个字符就可以了。

/// <summary>
 /// 含中文字符串转ASCII
/// </summary>
/// <param name="str"></param>
 /// <returns></returns>
public static string Str2ASCII(System.String str)
{
    try
    {
        //这里我们将采用2字节一个汉字的方法来取出汉字的16进制码
        byte[] textbuf = System.Text.Encoding.Default.GetBytes(str);
        //用来存储转换过后的ASCII码
        string textAscii = string.Empty;

        for (int i = 0; i < textbuf.Length; i++)
        {
            textAscii += textbuf[i].ToString("X");
        }
        return textAscii;
    }
    catch (System.Exception ex)
    {
        Debug.Log("含中文字符串转ASCII异常" + ex.Message);
    }
    return "";
}
 /// <summary>
/// ASCII转含中文字符串
/// </summary>
/// <param name="textAscii">ASCII字符串</param>
/// <returns></returns>
public static string ASCII2Str(string textAscii)
{
    try
    {
        int k = 0;//字节移动偏移量
        byte[] buffer = new byte[textAscii.Length / 2];//存储变量的字节
        for (int i = 0; i < textAscii.Length / 2; i++)
        {
            //每两位合并成为一个字节
            buffer[i] = byte.Parse(textAscii.Substring(k, 2), 
System.Globalization.NumberStyles.HexNumber);
            k = k + 2;
        }
        //将字节转化成汉字
        return System.Text.Encoding.Default.GetString(buffer);
    }
    catch (System.Exception ex)
    {
        Debug.Log("ASCII转含中文字符串异常" + ex.Message);
    }
    return "";
}