我需要帮助解码收到的回复。
at
OK
+CUSD: 0,"ar@?$ @9@d? ?@ ???(d??)@@1pD?"?T?Hc@
?& ?@D??? ?@??5 41 IA ?R",17
OK
+CUSD: 0,"ar?hb? ?' 10?@ ? ?hb@?J@@?@?? @f@??@?@S@d$@",17
我在另一个网络提供商的dcs值为72时尝试过。 但这个值17我不明白。 如何解码?
结果后:
AT+CSCS="UCS2"
OK
at+cusd=1,"002a003100350030002a0032002a00330032003300390031002a00360039003100370037002a00310023",15
+CUSD: 0,"00610072003f00680062003f0020003f00270020002000310030003f00400020003f0020003f006800620040003f004a00400040003f0040003f003f0020004000660040003f003f0040003f004000530040006400240040",17
AT+CSMP?
+CSMP: 17,167,0,0
OK
当我设置我的AT + CSCS =" UTF-8"它报告错误但是 用AT / CSCS =?
命令报告回来答案 0 :(得分:1)
回复的格式符合27.007:
+CUSD=[<n>[,<str>[,<dcs>]]]
因此第三个参数是<dcs>
。它的格式只是推迟了:
<dcs>: 3GPP TS 23.038 [25] Cell Broadcast Data Coding Scheme in integer format
(default 0)
在23.038的“5 CBS数据编码方案”一章中,它指出These codings may also be used for USSD
。
对于17,二进制0001 0001:
并注意到
不支持UCS2编码的MS将显示两个字符语言标识符,后跟不正确解释的用户数据。
这与输出中的情况完全相同(例如ar
表示阿拉伯语后跟垃圾)。
对于72,二进制0100 1000:
上面的“不支持”部分可能就是您正在使用有限的字符集编码(PCCP437)。在任何情况下,除非你的调制解调器不支持UTF-8,你真的应该使用它,而不是这个PCCP437。或者您可以使用USC2。如果您的调制解调器缺少这两个字符,您可以尝试HEX(根据我在研究此答案时所看到的内容猜测,也许您需要在AT + CSMP中设置<dcs>
参数才能使其正常工作?)。
请注意,选择UCS2后,每个字符串必须以这种方式编码,包括切换到另一个字符集,请参阅this answer以获取示例。
答案 1 :(得分:0)
使用以下函数解码“UCS2”响应数据:
public static String HexStr2UnicodeStr(String strHex)
{
byte[] ba = Hex2ByteArray(strHex);
return HexBytes2UnicodeStr(ba);
}
public static String HexBytes2UnicodeStr(byte[] ba)
{
var strMessage = Encoding.BigEndianUnicode.GetString(ba, 0, ba.Length);
return strMessage;
}
例如:
String str1 = SmsEngine.HexStr2UnicodeStr("002a003100350030002a0032002a00330032003300390031002a00360039003100370037002a00310023");
// str1 = "*150*2*32391*69177*1#"
请同时查看UnicodeStr2HexStr()