C#:如果一个字节是 0 到 255,那么 Encoding.UTF8.GetBytes("çõ") 怎么会返回最多 6 位的值,即 195167 和 195181?

问题描述

这是我的代码

byte[] sample = Encoding.UTF8.GetBytes("çõ");
foreach (byte c in sample)
  Debug.Write(c.ToString());

我正在努力编码消息以使用 PDU 模式通过 GSM 调制解调器发送文本。编码器算法期望字节数小于 127,并且不适用于值 195167 和 195181(对于葡萄牙字母“çõ”。如果消息中仅存在 ASCII 字符,则它有效。

解决方法

呸。 Encoding.UTF8.GetBytes("çõ") 实际上每个返回 2 个字节(称为代理对)。第一个字符返回 195 和 167,而第二个字符返回 195 和 181。当使用 Debug.WriteLine 而不是 Debug.Write 时发现它。附带说明:一些葡萄牙语字母(如ç和õ)不在GSM字符集中。 GSM 集仅使用字节 0-127 作为字符。您必须将葡萄牙语消息编码为 UCS2 字符集。