SMSManager 在asp.net中实现发短信的功能,中文乱码!求解

Stephen_Kang 2011-07-01 09:08:02
如题! 求解~~~~ 试了好多解码的函数。 都不行(如 urlencode.....)
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Stephen_Kang 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 taomanman 的回复:]
C# code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.Text.RegularExpres……
[/Quote]谢谢您,可是还是不行...依然乱码

最后我跟那边的客服联系了一下,他发给我一段中文编码的代码,结果好了。结贴!谢谢各位 共享一下,共同进步
=======================================================================
/// <summary>
/// 中文编码
/// </summary>
/// <param name="cstr"></param>
/// <returns></returns>
private string UrlEncode(string url)
{
Encoding encod = Encoding.GetEncoding("gb2312");
byte[] buffer = encod.GetBytes(url);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < buffer.Length; i++)
{
if (buffer[i] > 126)
{
sb.Append("%");
sb.Append(buffer[i].ToString("x"));
if (i == buffer.Length - 1)
{
break;
}
//sb.Append("%");
}
else
{
sb.Append(encod.GetString(buffer, i, 1));
}
}
return sb.ToString();
}
暖枫无敌 2011-07-03
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.Text.RegularExpressions;

/// <summary>
///SMS 的摘要说明
/// </summary>
public class SMS
{
public SMS()
{
//
//TODO: 在此处添加构造函数逻辑
//
}

public static char HexToChar(string hexstring)
{
return (char)Convert.ToInt32(hexstring, 16);
}

public static string CharToHex(char c)
{
return string.Format("{0:X}", (int)c);
}

public static string HexTostring(string hexstring)
{
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < hexstring.Length; i += 4)
{
string temp = hexstring.Substring(i, 4);
sb.Append(HexToChar(temp));
}
return sb.ToString();
}

public static string StringToHex(string s)
{
StringBuilder sb = new StringBuilder("");
foreach (char c in s)
{
sb.Append(CharToHex(c));
}
return sb.ToString();
}


/// <summary>
/// 将汉字转换为Unicode
/// </summary>
/// <param name="text">要转换的字符串</param>
/// <returns></returns>
public static string GBToUnicode(string text)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
string lowCode = "", temp = "";
for (int i = 0; i < bytes.Length; i++)
{
if (i % 2 == 0)
{
temp = System.Convert.ToString(bytes[i], 16);//取出元素4编码内容(两位16进制)
if (temp.Length < 2) temp = "0" + temp;
}
else
{
string mytemp = Convert.ToString(bytes[i], 16);
if (mytemp.Length < 2) mytemp = "0" + mytemp; lowCode = lowCode + mytemp + temp;//取出元素4编码内容(两位16进制)
}
}
return lowCode;
}

/// <summary>
/// 将Unicode转换为汉字
/// </summary>
/// <param name="name">要转换的字符串</param>
/// <returns></returns>
public string UnicodeToGB(string text)
{
MatchCollection mc = Regex.Matches(text, "([\\w]+)|(\\\\u([\\w]{4}))");
if (mc != null && mc.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (Match m2 in mc)
{
string v = m2.Value;
if (v.StartsWith("http://www.cnblogs.com/xczt/admin/file://u/"))
{
string word = v.Substring(2);
byte[] codes = new byte[2];
int code = Convert.ToInt32(word.Substring(0, 2), 16);
int code2 = Convert.ToInt32(word.Substring(2), 16);
codes[0] = (byte)code2;
codes[1] = (byte)code;
sb.Append(Encoding.Unicode.GetString(codes));
}
else
{
sb.Append(v);
}
}
return sb.ToString();
}
else
{
return text;
}
}

#region 发送短息

/// <summary>
/// SendMessage函数用于发送短信.参数strMobileNumber设置手机号码,strMsgContent指
/// 定要发送的内容
/// </summary>
/// <param name="strMobileNumber">手机号码</param>
/// <param name="strMsgContent">要发送的内容</param>
/// <returns> 返回指示发送是否成功</returns>
public bool SendMessage(string strMobileNumber,string strMsgContent)
{
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort.WriteTimeout = 2000;
try
{
serialPort.ReadBufferSize = 900000;
if (serialPort.IsOpen) serialPort.Close();
serialPort.Open();
serialPort.WriteLine("ATZ\r");
Thread.Sleep(500);
serialPort.ReadExisting();
serialPort.WriteLine("AT+CSMP=1,167,0,8" + "\r");
serialPort.Write("AT+CMGS=" + strMobileNumber + "\r");
Thread.Sleep(1000);
string content = GBToUnicode(strMsgContent);
serialPort.Write(content + Convert.ToChar(26).ToString());
Thread.Sleep(2000);
string msg = serialPort.ReadExisting();
serialPort.Close();
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
finally
{
//保证操作完成以后关闭端口,避免占用
if (serialPort.IsOpen)
serialPort.Close();
}
}
#endregion
}

Stephen_Kang 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wxr0323 的回复:]

sendDataMessage()
[/Quote]这位大侠,能说清楚点吗?谢谢。我是调用Mobile发短信的接口的
子夜__ 2011-07-02
  • 打赏
  • 举报
回复
sendDataMessage()

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧