问题如下:
有个byte[]数组b,内容是96 3F 62 C9 4E 01, 如果用Encoding.BigEndianUnicode.getString(b)去做的话,是中文“阿拉丁”3个字现在用其他的编码方式转换为字符串,比如:string str = Encoding.ASCII.GetString(b);
当再用相同的编码方式转换为数组:byte[] b1 = Encoding.ASCII.GetBytes(str);
则 b1和b的内容不同了。
用Encoding.Default, Encoding.getEncoding("GB2312"), Encoding.UTF7, Encoding.UTF8等编码转换后,数组的内容都变了请问: 有什么方法,可以让相同编码转换后,得到的数据内容相同? (不能用Encoding.BigEndianUnicode)
有个byte[]数组b,内容是96 3F 62 C9 4E 01, 如果用Encoding.BigEndianUnicode.getString(b)去做的话,是中文“阿拉丁”3个字现在用其他的编码方式转换为字符串,比如:string str = Encoding.ASCII.GetString(b);
当再用相同的编码方式转换为数组:byte[] b1 = Encoding.ASCII.GetBytes(str);
则 b1和b的内容不同了。
用Encoding.Default, Encoding.getEncoding("GB2312"), Encoding.UTF7, Encoding.UTF8等编码转换后,数组的内容都变了请问: 有什么方法,可以让相同编码转换后,得到的数据内容相同? (不能用Encoding.BigEndianUnicode)
解决方案 »
- 关于div和js的滑块问题
- 关于VS2008打包程序的问题
- 用api(GetWindowRect)获取窗体矩形的问题
- 一个winform窗体上有十几个textbox,每个textbox是绑定在一个datatable的不同字段上的,如何快速简单判断是否修改了textbox的值。
- c# winform的treeview,如何去掉或隐藏他的根节点
- System.Array.CopyTo() 和 System.Array.Clone()区别
- 如何用C#进行上传?
- 准备学c#,但是它的开发工具是什么?
- 请问在没有DataGrid时,能用这句话吗dataSet11.Tables["EMSFMGZGLZ"].Rows[?].Delete();如果能用,问号怎么确定?
- C#数组参数(加params)的作用是什么?
- 在C#中,怎么把IP转换成0xEA060101这样的格式,比如急,谢谢!
- 打开window窗体
如果用default或者ascii转换为string,那么“阿拉丁”这3个字就再也不能还原了。不知道 有没有高手做过 cdma短信编程,可以解决这个问题?
string s = Encoding.GetEncoding("GB2312").GetString(b); Console.WriteLine(s);显示"中国奥运会"
你可以试试,先用
byte[] b = Encoding.BigEndianUnicode.GetBytes("中国奥运会");
得到一个数组然后再把这个数组用
string s = Encoding.GetEncoding("GB2312").GetString(b);
得到字符串
再用byte[] b1 = Encoding.GetEncoding("GB2312").GetBytes(s);
得到数组去比较b和b1的内容是否相同
为什么收到的数据中会有BigEndianUnicode和ascii两种编码?怎么区分这两种编码?如果知道分界在哪里,就分别用这两种编码处理好了。
string s = Encoding.GetEncoding("GB2312").GetString(b); //用 GB2312 解码
byte[] y = Encoding.GetEncoding("GB2312").GetBytes(s); //再用GB2312编码 Console.WriteLine(b.Length.ToString() + " " + y.Length.ToString()); //输出2种都是6个字节 for (int i = 0; i < b.Length; i++)
Console.WriteLine((b[i] == y[i]) ? "OK" : "Wrong"); //输出6个OK ,说明每个字节都是一样的.
+CMGR:"REC UNREAD","13777831205", "08/09/19,11 :48 :15",0,4,0,6
?b蒒
OK
其中 ?b蒒 这堆乱码,用ascii去看是 96 3F 62 C9 4E 01。而96 3F 62 C9 4E 01 只有用BigEndianUnicode能显示“阿拉丁”,其他的编码都不能正常显示如果把这整个串都用BigEndianUnicode去转换的话,那其他的字符串就不能认识了
读出的原始的byte[]是什么?贴出来看看。
0D 0A 2B 43 4D 47 52 3A 22 52 45 43 20 55 4E 52 45 41 44 22 2C 22 31 33 37 37 37 38 33 31 32 30 35 22 2C
22 30 38 2F 30 39 2F 31 39 2C 31 31 20 3A 34 38 20 3A 31 35 22 2C 30 2C 34 2C 30 2C 36 0D 0A 96 3F 62 C9 4E 01 0D 0A 4F 4B 0D 0A
7.7.1 Description :
This command allows the application to read stored messages. The messages are read from the
memory selected by +CPMS command.
7.7.2 Syntax :
Command syntax : AT+CMGR=<index>
Response syntax:
+CMGR :<stat>,<oa>, <scts>,<lang>,<encod>,<priority>[,<cbn>]<CR><LF> <data> (for SMSDELIVER
only)
+CMGR : <stat>,<da>,<dt>,<lang>,<encod><priority>[,<cbn>]<CR><LF> <data> (for SMS-SUBMIT
only)
+CMGR : <stat>,<mr>,<scts>,<dt>,<st> (for SMS-STATUS-REPORT only)
A message read with status “REC UNREAD” will be updated in memory with the status “REC
READ”.
Note :
the <stat> parameter for SMS Status Reports is always “READ”.Example : AT+CMGR=1
Possible responses: +CMGR: “REC UNREAD”,”8585551212”,”98/10/01,18 :22 :11+00”,1,2,0,”8585550000”<CR><LF>ABCdefGHIOK
7.7.3 Defined values
<stat> Status of message in memory.
<oa> : Origination Address Value in string format.
<scts>: Service Center Time Stamp in string format
<lang>: Language.
<encod>: Encoding
<priority>: Message priority:
0 – NORMAL
1 – INTERACTIVE
2 – URGENT
3 – EMERGENCY
<cbn>: Call Back Number
at+cmgf=1 是txt模式, cdma用的是at+cmgf=1
那就按照这个格式去解析不就对了吗? 分段解析.
0D 0A 2B 43 4D 47 52 3A 22 52 45 43 20 55 4E 52 45 41 44 22 2C 22 31 33 37 37 37 38 33 31 32 30 35 22 2C 22 30 38 2F 30 39 2F 31 39 2C 31 31 20 3A 34 38 20 3A 31 35 22 2C 30 2C 34 2C 30 2C 36 0D 0A 96 3F 62 C9 4E 01 0D 0A 4F 4B 0D 0A
这段数组中哪段是BigEndianUnicode?