0

我在我的设备中使用 SIM-900。

我需要从 sim 卡中获得余额。

我使用这个命令并得到这个结果。

Command Modem: AT+CUSD=1,"*555*1*2#" 

结果:

+CUSD: 0,"06270639062A062806270631002006270635064406CC002000340039003900380039063106CC06270644002E00200031062F064206CC064206470020062A064506270633003D003100300030062F064206CC064206470020062A06450627063300200631062706CC06AF062706460020062F063106470645062706460020063106480632",72

我知道这个结果是 PDU 格式和 UCS2,但我无法阅读文本。

String pdu = "06270639062A062806270631002006270635064406CC002000340039003900380039063106CC06270644002E00200031062F064206CC064206470020062A064506270633003D003100300030062F064206CC064206470020062A06450627063300200631062706CC06AF062706460020062F063106470645062706460020063106480632"

SmsMessage smsMessage = SmsMessage.createFromPdu(pdu);

我使用这个网站。和工作,但我不能在 java android 中。 在此处输入图像描述

4

1 回答 1

4

06270639062A...0627 0639 062A ...
0627是十六进制的 Unicode 字符ا( ARABIC LETTER ALEF )
0639是十六进制的 Unicode 字符ع( ARABIC LETTER AIN )
062A是十六进制的 Unicode 字符ت( ARABIC LETTER TEH )
等等...

因此,以 4 个为一组获取十六进制数字,解析为十六进制并分配给char(因为char是 UTF-16 aka UCS2,如下所示:

String input = "06270639062A062806270631002006270635064406CC002000340039003900380039063106CC06270644002E00200031062F064206CC064206470020062A064506270633003D003100300030062F064206CC064206470020062A06450627063300200631062706CC06AF062706460020062F063106470645062706460020063106480632";

char[] buf = new char[input.length() / 4];
for (int i = 0; i < buf.length; i++)
    buf[i] = (char) Integer.parseUnsignedInt(input.substring(i * 4, i * 4 + 4), 16);
String output = new String(buf);

System.out.println(output);

输出

اعتبار اصلی 49989ریال. 1دقیقه تماس=100دقیقه تماس رایگان درهمان روز
于 2019-09-06T23:20:59.967 回答