当前位置:编程学习 > wap >>

SIM 卡中保存最大长度汉字问题

 开发SIM中的电话本功能:

市面手机在SIM中保存电话号码,使用汉字最大长度一般达到 5

也就是说 AT+CPBR=?
max.length of text for number 至少要到达20个(AT+CSCS="USC2", 汉字需要USC2)

而我目前使用的模块
AT+CPBR=?
+CPBR: (1-250),40,14

最大才能保存3个汉字。 3*4 = 12 

也向供应商咨询了这个问题,说是这个是由sim卡决定的。 

疑问是相同SIM卡,可以在其他手机上保存5个汉字了。

也查了一下3gp ,没有规定AT+CPBR=?的值。

有没有人碰到相同的问题,如何解决?

谢谢! --------------------编程问答-------------------- 你用的是什么模块? 会不会是模块的问题? --------------------编程问答-------------------- SIMCOM的模块  --------------------编程问答-------------------- 有AT命令获取当前SIM卡支持多大长度名字的~ --------------------编程问答-------------------- 跟两点有关
1)出厂时电话本的记录长度,一般都可以存储10个字节,如果是汉字,那就是5个。
2)跟汉字编码有关,在sim卡的电话本中,可以用一个字节表示一个汉字,当然有很多局限,但是这样可以存储更多的汉字。
--------------------编程问答-------------------- ADN的格式

ADN存放于sim卡下面3f00/7f10/6f3a,记录文件格式,其最小记录格式为14,最长为255(?),记录个数最大为255(?)

其后数14个字节是必有的,其前12个字节是电话号码,倒数第一个是ext1,倒数第二个是ccp1

如果长度超过14个,则前面的存储的用户的姓名,如果以80,81,82开头,存放的是ucs2格式的姓名,否则是英文格式的串。

示例如下。


//Reset
3B 7B 11 22 33 00 01 02 03 04 05 06 07 08 09 0A 
//点击显示详细信息,005644E0,0000001F,00000010

//SELECT
A0 A4 00 00 02 3F 00 
9F 17 
//选择文件,选中文件为3F 00 代表MF
//9F 17 是返回状态,表示---成功,有23 个字节的信息等待GET RESPONSE

//SELECT
A0 A4 00 00 02 7F 10 
9F 17 
//选择文件,选中文件为7F 10 代表TELECOM
//9F 17 是返回状态,表示---成功,有23 个字节的信息等待GET RESPONSE

//SELECT
A0 A4 00 00 02 6F 3A 
9F 0F 
//选择文件,选中文件为6F 3A 代表ADN[CDMA-PL]
//9F 0F 是返回状态,表示---成功,有15 个字节的信息等待GET RESPONSE

//GET RESPONSE
A0 C0 00 00 0F 
00 00 1B 58 6F 3A 04 00 11 FF 22 01 02 01 1C 
90 00 
//点击显示详细信息,004034F4,0000002F,0000000F
//90 00 是返回状态,表示---成功

//READ RECORD
A0 B2 01 04 1C 
80 5F 20 4E 09 FF FF FF FF FF FF FF FF FF 05 81 11 22 33 44 FF FF FF FF FF FF FF FF 
90 00 
//读记录,P2 = 04 表示绝对记录号,P1 = 01 为记录号,表示第1 条记录P3 = 1C 表示后面的数据长度为28 
//这是一条ADN,姓名 "张三",电话号码 11223344
//90 00 是返回状态,表示---成功

//READ RECORD
A0 B2 02 04 1C 
80 67 4E 56 DB FF FF FF FF FF FF FF FF FF 05 81 55 66 77 88 FF FF FF FF FF FF FF FF 
90 00 
//读记录,P2 = 04 表示绝对记录号,P1 = 02 为记录号,表示第2 条记录P3 = 1C 表示后面的数据长度为28 
//这是一条ADN,姓名 "李四",电话号码 55667788
//90 00 是返回状态,表示---成功

//READ RECORD
A0 B2 03 04 1C 
4A 65 6E 6E 79 FF FF FF FF FF FF FF FF FF 06 81 00 10 11 22 F2 FF FF FF FF FF FF FF 
90 00 
//读记录,P2 = 04 表示绝对记录号,P1 = 03 为记录号,表示第3 条记录P3 = 1C 表示后面的数据长度为28 
//这是一条ADN,姓名 "Jenny",电话号码 000111222
//90 00 是返回状态,表示---成功

//READ RECORD
A0 B2 04 04 1C 
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 
90 00 
//读记录,P2 = 04 表示绝对记录号,P1 = 04 为记录号,表示第4 条记录P3 = 1C 表示后面的数据长度为28 
//这是一条空ADN
//90 00 是返回状态,表示---成功
--------------------编程问答-------------------- csdn的ubb真是垃圾啊,还是看blog吧。

sim卡中电话本(ADN)的简要格式 --------------------编程问答-------------------- 6F3A的一条记录一般是28个字节,前14个字节是名称 后14字节是号码。
如果保存的是汉字UCS2编码,第一个字节应该是0x80,剩余13个字节最多只能保存6个汉字了。 --------------------编程问答-------------------- 谢谢各位。  --------------------编程问答--------------------
jennyvenus
有疑问?

sim卡中电话本(ADN)与CPBR at命令有什么关系?看不懂

at+cscs=?

+CSCS: ("GSM","HEX","IRA","PCCP","PCDN","UCS2","8859-1")

OK

选择字符编码。

AT+CPBR=?

+CPBR: (1-250),40,14      40,是最大的号码长度, 14 为号码名字长度

OK

如果用"GSM“编码,我可以保存14 为号码名字长度

AT+CPBR=1,"Linconln Labatt”, 13590130423
如果用"UCS2”编码,4个汉字编码, 4*4 超长,

6DF157337136为深圳然的UCS2编码

at+cpbr=3

+CPBR: 3,"83800000",129,"6DF157337136"

OK
如果保存“深圳燃气”6DF157337136xxxx 16个超过了。

但是通过其他手机可以读出来的。 --------------------编程问答-------------------- 5楼强 --------------------编程问答-------------------- at指令俺不懂。能存储多少个汉字要看汉字的编码格式以及总存储空间,如果有14个字节的总存储空间,则存储6个汉字是不成问题的,换成81编码,可以存储11个(好像)汉字。
--------------------编程问答--------------------
引用 11 楼 jennyvenus 的回复:
at指令俺不懂。能存储多少个汉字要看汉字的编码格式以及总存储空间,如果有14个字节的总存储空间,则存储6个汉字是不成问题的,换成81编码,可以存储11个(好像)汉字。


朋友请问现在sim卡的薪资是多少,我目前是做数字电视智能卡的,想往sim卡转,但不知道多钱合适。对GSM标准也略知一些。 --------------------编程问答-------------------- 难道没有知道的?还是太少没人敢说? --------------------编程问答--------------------
引用 13 楼 tianma2005123 的回复:
难道没有知道的?还是太少没人敢说?


呵呵   做一般的stk开发 也就3000-4000  如果做cos开发  6000-7000吧    我说的是在珠海。
--------------------编程问答-------------------- 一般sim卡中一条ADN记录的长度是28个字节吧,我用2G的移动动感地带卡跟3G联通USIM卡分别读过,但是不清楚这个跟平台有关系么。
分别是名字14个字节,号码14个字节。
名字中如果需要使用中文的话第一个字节需要设置成80,所以也就说最多只能保存6个中文字符,
而号码中的14个字节中还需要存放号码长度等等其他信息,一般只能存10个字节,也就是最多可以存20位数字的号码。
android平台。。
--------------------编程问答-------------------- adn一般26-28字节,俺的卡是36字节的。 --------------------编程问答--------------------
引用 7 楼 zxt12300 的回复:
6F3A的一条记录一般是28个字节,前14个字节是名称 后14字节是号码。
如果保存的是汉字UCS2编码,第一个字节应该是0x80,剩余13个字节最多只能保存6个汉字了。


我的手机SIM卡是这样开始的“FF FF FF FF 80 53 05 8F 66 FF FF FF FF FF FF FF FF FF 07 81 31 65 30 64 21 F5 FF FF 90 00”,怎么不是你们说的80开始的?前面那几个FF代表什么? --------------------编程问答--------------------
引用 17 楼 rita_cai 的回复:
引用 7 楼 zxt12300 的回复:

6F3A的一条记录一般是28个字节,前14个字节是名称 后14字节是号码。
如果保存的是汉字UCS2编码,第一个字节应该是0x80,剩余13个字节最多只能保存6个汉字了。


我的手机SIM卡是这样开始的“FF FF FF FF 80 53 05 8F 66 FF FF FF FF FF FF FF FF FF 07 81 31 65 30 ……

您那卡可能有bug, 80 53 05 8f 66是 “包车”的意思
--------------------编程问答-------------------- 我这个是我自己的手机卡哦,也会有bug的问题?我理解的就是80开始的位置决定了能保存的汉字数,这个有木有道理呢?
引用 18 楼 jennyvenus 的回复:
引用 17 楼 rita_cai 的回复:
引用 7 楼 zxt12300 的回复:

6F3A的一条记录一般是28个字节,前14个字节是名称 后14字节是号码。
如果保存的是汉字UCS2编码,第一个字节应该是0x80,剩余13个字节最多只能保存6个汉字了。


我的手机SIM卡是这样开始的“FF FF FF FF 80 53 05 8F 66 FF FF FF FF FF FF ……
--------------------编程问答-------------------- adn的格式是有规范明确规定的,您可以换换工具,换换其他读卡器再读读看,看看其他软件是否能够正确识别,不同的软件读出来的是否相同。
--------------------编程问答--------------------
引用 20 楼 jennyvenus 的回复:
adn的格式是有规范明确规定的,您可以换换工具,换换其他读卡器再读读看,看看其他软件是否能够正确识别,不同的软件读出来的是否相同。

估计是读卡器问题,我试了下其他人的手机卡,一点数据都没有。。。
补充:移动开发 ,  移动开发其他问题
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,