我在用C#读取手机短信时如果发过来的短信内容全是英文或者全是数字就出现乱码,而其中只要有一个中文就不会出现乱码,请问这个问题要怎么解决啊,大家帮帮吧,谢谢了!!!!
解决方案 »
- 请问c#.net是个什么东东啊?可以用来开发应用程序吗?
- Struct 里怎么做线程同步?
- Datatable 中的元素可以是数组吗?
- C#WinForm程序运行时,窗体里部分控件无法显示?有朋友遇到过这样的问题吗?
- SOCKET.Accept()方法如何获取远程端IP
- 请问一下,c#里面,数据库count返回的值用reader可以获取吗?获取后赋值给int型的
- WPF xaml中Style设置值的StaticResource的问题
- 关于Form
- 急急急,一个关于datagrid中复选框问题。
- 程序已打开,并且在托盘中,重新点击程序时,不用重新运行,仅最大化托盘中的程序!就象金山词霸一样!
- 两点之间的距离
- 急!请教如何用.net接收rs232传输的数据
public string StandardSms(string msgStr)
{
string msgStrContent = "";
if (msgStr.Contains("OK"))
{ string[] tStr = msgStr.Split('\r');
for (int i = 0; i < tStr.Length; i++)
{
string pdu = "";
if (tStr[i].IndexOf('\n') == 0)
{
pdu = tStr[i].Substring(1);
}
if (pdu != "")
{
if (pdu.Substring(0, 2) == "08")
{
msgStrContent += pduEncoding.GetTextFromPdu_UCS2(pdu); } else if (pdu.Substring(0, 2) == "00")
{
msgStrContent += pduEncoding.GetTextFromPdu_7Bit(pdu).Replace("\0", "");
}
}
} }
return msgStrContent;
}
public string GetTextFromPdu_UCS2(string pdu) //解析短信正文函数_UCS2编码
{
//截取PDU串中短信正文部分源码,读者也可用BitConverter函数实现部分转换 string TextInPdu = pdu.Substring(58);
string Text = "";
char[] d = TextInPdu.ToCharArray();//存入字符数组
for (int i = 0; i < d.Length; i += 4)
{
int unicode_nu = 0;
for (int m = 0; m < 4; m++) //计算 Unicode 十进制值
{
if (i + m > d.Length - 1) break;
unicode_nu += HexToDec(d[i + m]) * (1 << ((3 - m) * 4));
}
Text += (char)unicode_nu; //输出 Unicode 对应字符
}
return Text;//返回短信正文内容 }
public string GetTextFromPdu_7Bit(string pdu) //解析短信正文函数_7-Bit编码
{
string TextInPdu = pdu.Substring(58);//截取PDU串中短信正文部分源码
string Text = "";
while (TextInPdu.Length % 14 != 0) //最后一组不满7个成员时补"0"
TextInPdu += "0";
char[] a = TextInPdu.ToCharArray(); //将源码存入字符数组 a[]
string b = "";
for (int i = 0; i < a.Length; i++) //将源码转为二进制并存入字符串 b
b += GetBinary(a[i]);
char[] total = b.ToCharArray(); //将二进制码存入字符数组 total[]
for (int j = 0; j < total.Length; j += 56) //56位二进制码为一组,循环所有组
{
char[] s = new char[56];
for (int i = 0; i < 56; i++) //将一组二进制码拷贝到字符数组 s[]
s[i] = total[i + j];
char[] d = new char[56];
//-------------------------------------------------------------------------------------
for (int i = 0; i < 7; i++) //组内解码得到目标二进制码数组 d[]
d[i] = s[i + 1];
for (int k = 1; k <= 6; k++)
{
for (int i = k * 7; i < (k + 1) * 7 - k; i++)
d[i] = s[i + (k * 2 + 1)];
for (int i = (k + 1) * 7 - k; i < (k + 1) * 7; i++)
d[i] = s[i - ((7 - k) * 2 + 1)];
}
for (int i = 49; i < 56; i++)
d[i] = s[i - 1];
//-------------------------------------------------------------------------------------
for (int k = 0; k < 56; k += 7) //组内循环得到目标 ASCII 字符
{
int ascii_nu = 0;
for (int m = 0; m < 7; m++)
ascii_nu += Convert.ToInt16(d[k + m].ToString()) * (1 << (6 - m));
Text += (char)ascii_nu; //输出 ASCII 码相应字符
}
} // END OF loop j
return Text;
}
http://www.lvtaostudio.com