如何把中文保存到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 "";
}