我在使用名为 Cymba 的提供商发送的 SMS 消息时遇到问题。
基本上,我会根据他们的规范 URL 编码将消息发布给他们。
但是,当消息发送到我的手机时,£ 会在前面显示一个 A,即 £A
现在 C# 字符串默认是 Unicode,所以我切换到 ASCII 编码,而 £ 变成了 ?。
我已经尝试将消息字符串转换为从 Unicode 和 ASCII 版本开始的十六进制(因为通过此网关,您也可以将消息提交为十六进制)。然而,同样的行为也会发生。
我怀疑这与字符串编码有关,因为 SMS 支持 7 位编码格式:GSM 03.38
我还怀疑,如果我通过 Unicode 发送,我只会收到 70 或 140 字符的消息,而不是标准的 160。
我对 SMS 发送很陌生,因此我们将不胜感激任何帮助或建议。
所以问题是,我怎样才能让我的 C# 字符串变成这种格式?
更新:看起来网关的问题不是我的代码,因为我尝试用 7 位等效十六进制值替换有问题的 £,但这也不起作用。请参阅下面的我的测试代码,这可能会在未来帮助其他人:
byte pound = 0xA3;
byte GSMPound = 0x01;
string hexxedMsg = "";
System.Text.UnicodeEncoding encoder = new System.Text.UnicodeEncoding();
byte[] msgBytes = encoder.GetBytes(message);
foreach (byte byt in msgBytes)
{
if(byt == pound)
hexxedMsg += GSMPound.ToString("X");
else
hexxedMsg += byt.ToString("X2"); ;
}