2009-11-06 | #1 (permalink) |
高级会员
|
如何在vb中将汉字转化成unicode
A.发送中文例子:
发送中文有两种方法,一种是PDU,一种是UCS2文本 1.PDU方法: at+cmgf=0 at+cmgs=24 >0891683108100005F011000B813109018759F10008A70A00650073007496484E30 信息内容为set陈丰 解释:此字符串传set陈丰五个字符,采用unicode编码。 0891固定格式不动,683108100005F0为短消息中心号码, 11固定格式不动代表PDU格式, 00代表是第几条短消息, 0B81固定格式不动,3109018759F1为目的号码, 00固定格式不动代表是短消息, 08代表8位unicode编码(中文必须用unicode编码),F0到F3为7编码,F4到F7为8位编码 A7代表此短消息在短消息中心存储的时间是24小时,最大FF为135周, 0A代表后有10个字节(有1个字节为01,2个为01,类推) 0065是s的unicode编码,0073是e的unicode编码,0074是t的unicode编码, 9648是陈的unicode编码,4E30是丰的unicode编码 0A后跟的就是所需发送的消息部分,全部采用unicode的编码。 unicode的编码转换可调用VB或VC中的函数直接得到。 at+cmgs=24中的24是14再加上消息长度10得出的. 2.USC2的文本方法 at+cmgf=1 at+csmp=??,??,??,8(问号代表自己根据需要选择合适的参数) at+cmgs=手机号码(1390PQRABCD) >00650073007496484E30 信息内容为set陈丰 当您用UCS2文本发送中文短消息时,要先将中文转成unicode编码, 再将中文短消息的unicode编码用文本方式发送. B.编程例子: Private Sub Command1_Click() ' 使用 COM3。 ' 9600 波特,无奇偶校验,8 位数据,一个停止位。 MSComm1.Settings = "9600,N,8,1" MSComm1.Handshaking = comRTS ' 打开端口。 ' MSComm1.PortOpen = False ' MSComm1.PortOpen = True ' 将 at 命令送到调制解调器。 MSComm1.Output = "AT" MSComm1.Output = Chr(13) MSComm1.Output = "AT+CMGF=1" MSComm1.Output = Chr(13) MSComm1.Output = "AT+CMGS=" MSComm1.Output = Chr(34) MSComm1.Output = "13901237885" MSComm1.Output = Chr(34) MSComm1.Output = Chr(13) MSComm1.Output = "test OK " MSComm1.Output = Chr(26) End Sub Private Sub Command3_Click() MSComm1.CommPort = 2 MSComm1.PortOpen = True End Sub //将UNICODE转换中文 Public Function Unicode2AscII(ByVal s As String) On Error Resume Next Dim i As Integer Dim r As String For i = 1 To Len(s) Step 4 r = r + ChrB("&H" & Mid(s, i + 2, 2)) & ChrB("&H" & Mid(s, i, 2)) Next Unicode2AscII = r End Function //将中文转换为UniCode, function AnsiToUnicode(Ansi: string):string; var s:string; i:integer; j,k:string[2]; a:array [1..1000] of char; begin s:=''; StringToWideChar(Ansi,@(a[1]),500); i:=1; while ((a[i]<>#0) or (a[i+1]<>#0)) do begin j:=IntToHex(Integer(a[i]),2); k:=IntToHex(Integer(a[i+1]),2); s:=s+k+j; i:=i+2; end; Result:=s; end; |