I use SIM-900 in my device.
I need to get a balance from sim card.
I use this command and get this result.
Command Modem: AT+CUSD=1,"*555*1*2#"
result:
+CUSD: 0,"06270639062A062806270631002006270635064406CC002000340039003900380039063106CC06270644002E00200031062F064206CC064206470020062A064506270633003D003100300030062F064206CC064206470020062A06450627063300200631062706CC06AF062706460020062F063106470645062706460020063106480632",72
I know this result is PDU format and UCS2, but I can't read text.
String pdu = "06270639062A062806270631002006270635064406CC002000340039003900380039063106CC06270644002E00200031062F064206CC064206470020062A064506270633003D003100300030062F064206CC064206470020062A06450627063300200631062706CC06AF062706460020062F063106470645062706460020063106480632"
SmsMessage smsMessage = SmsMessage.createFromPdu(pdu);
I use this site. and work but I can't in java android.
06270639062A...
is 0627 0639 062A ...
.
0627
is hex for Unicode character ا
(ARABIC LETTER ALEF)
0639
is hex for Unicode character ع
(ARABIC LETTER AIN)
062A
is hex for Unicode character ت
(ARABIC LETTER TEH)
and so on...
So, grap hex digits in blocks of 4, parse as hex and assign to char
(since char
is UTF-16 aka UCS2
, like this:
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);
Output
اعتبار اصلی 49989ریال. 1دقیقه تماس=100دقیقه تماس رایگان درهمان روز