java ussd 中的 PDU 和 UCS2
PDU and UCS2 in java ussd
我在我的设备中使用 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);
我用这个site。和工作,但我不能 java android。
06270639062A...
是 0627 0639 062A ...
.
0627
是 Unicode 字符的十六进制 ا
(ARABIC LETTER ALEF)
0639
是 Unicode 字符的十六进制 ع
(ARABIC LETTER AIN)
062A
是 Unicode 字符的十六进制 ت
(ARABIC LETTER TEH)
等等...
因此,将十六进制数字分成 4 个块,解析为十六进制并分配给 char
(因为 char
是 UTF-16 又名 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دقیقه تماس رایگان درهمان روز
我在我的设备中使用 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);
我用这个site。和工作,但我不能 java android。
06270639062A...
是 0627 0639 062A ...
.
0627
是 Unicode 字符的十六进制 ا
(ARABIC LETTER ALEF)
0639
是 Unicode 字符的十六进制 ع
(ARABIC LETTER AIN)
062A
是 Unicode 字符的十六进制 ت
(ARABIC LETTER TEH)
等等...
因此,将十六进制数字分成 4 个块,解析为十六进制并分配给 char
(因为 char
是 UTF-16 又名 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دقیقه تماس رایگان درهمان روز