[急救]关于接收中文短信出现乱码的问题

8cet8 2004-04-20 12:16:00
各位大哥:
我使用java从短信平台接收短信
但是如果遇到中文短信则显示乱码
我查阅相关资料,进行了以下转码工作:

if(MessageCoding==8) //UCS2编码格式
{
 try
 {
 MessageContent = new String(MessageByte,"UnicodeBigUnmarked");
}
 catch (UnsupportedEncodingException e) {}
}
else
{
 MessageContent = new String(MessageByte);
}

但是还是接收中文乱码,准确的讲是一个字符也没有了!!!
我确定收到的短信编码格式是UCS2没错
敬请指教指教啊~~!

...全文
574 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
smset 2004-04-30
  • 打赏
  • 举报
回复

1、短信网关/短信二次开发方案

  现在短信息的应用越来越普遍,如果能在最短的时间内,使您的系统具备短信功能,利用短信的方式,发布会议通知,日程提醒和信息查询等功能,无疑会给您的系统增加新的卖点!

  我们专为软件厂商开发了短信二次开发平台、短信网关服务器,可实现与您现有的系统无缝连接,使您的软件在最短的时间内具备短信功能,它们适用于OA、CRM、ERP、物流系统等需要实现短信通讯的应用系统,支持网络多客户端共用一套短信设备,便于集中管理。  

短信平台提供了多种接口供您选择,包括DLL接口,OCX控件,数据库接口等,并且提供了丰富的开发文档和例程代码,可以到http://www.smset.com上免费下载试用。


2。FT35A GSM MODEM


  手机短信作为一种使用方便、费用低廉的即时通讯方式,在众多通信手段中脱颖而出,得到越来越多广泛的应用。 在许多商业和工业级短信应用中,均要求短信收发设备非常可靠,发送速度快,能够适应长期不间断工作,而普通手机的工作方式则难以满足要求。

  FT35A GSM专门针对短信应用设计,内嵌西门子工业级TC35模块,简化了通信接口,性能稳定可靠,完全兼容标准GSM MODEM AT命令集,符合各种商业和工业级短信应用要求, 适用于各行各业,各个领域作无线数据通信,短信息通告,短信查询等应用, 您可以完全放心地将它集成到您的系统中。


我们为您提供性价比极佳的短信集成和短信开发方案,敬请访问:
http://www.smset.com
-------------------------------------------------

短信二次开发平台简介

  为了减少短信应用软件的开发周期,减少开发工作,提高系统稳定性和可靠性,减少您的开发工作量,提高应用软件的可靠性,我们专门开发了短信二次开发平台。

  使用飞天短信二次开发平台,您可以简单快捷的进行OEM和二次开发,将短信系统与企业信息管理系统全面融合。广泛应用在企业MIS系统、调度通知系统、ERP应用、OA办公网络、客户服务中心等关键环节,将短消息服务与针对不同行业度身定制的信息管理系统相结合,根据不同客户、不同需求,高效提供更多个性化的服务、产品和信息。


飞天短信二次开发平台的特点

1.SMSCLIENT.DLL提供一系列控制函数库,用户通过在自行开发的软件中调用这些API函数,就可实现短信的收发功能。适用于主流开发平台(VB、 Delphi 、VC、VFP等),帮助您的应用系统快速集成短信功能。


2. 基于本平台,可使同一局域网内众多客户端共享一个短信服务器进行短信收发,既实现了资源的共享和有效使用,又便于企业对进出信息的管理、监控和统计。


3. 基于此平台可快速开发网络短信的应用,您无需了解复杂的GSM通信控制协议,只需简单调用几个API函数,即可让系统快速集成短信功能。


4.低成本实施, 采用GSM模块接入普通电脑,配合本套软件,无须上网即可收发短信,使用和维护简单方便,有效保障企业利益。

三、短信二次开发平台包括的内容


FTSMSGW.EXE 飞天短信网关服务器程序

GWMANUAL.DOC 飞天短信网关服务器使用手册

SMSCLIENT.DLL 短信二次开发函数库

DLLREADME.DOC 动态库使用说明

EXAMPLE目录 包括VC和Delphi等调用例程源代码

TOOLS目录 包括串口测试工具和短信测试工具




三、API函数说明


int InitConnect(char *hostname);

功能:初始化SMS客户程序与SMS服务程序的连接

参数说明:hostname--指运行SMS服务程序的计算机的网络名称

返回:-1--失败 0--成功


int SendMsg(char *SCA,char *DA,char *UD);

功能:发送一条短消息(实际上是提交一条消息给SMS服务程序,由SMS服务程序发出去)

参数说明:SCA--短消息中心号码(如成都移动就是:"13800280500")

DA--接收方手机号码(如"13980711226")

UD--消息内容(如"你好!");

返回:-1:提交给SMS网关服务程序失败

0:提交给SMS服务程序成功


int QueryMsg();

功能:查询SMS接收情况

参数说明:无

返回:-1--查询失败,SMS网关服务程序无响应。

0--查询成功,SMS服务程序端没有收到的消息。

N(1,2,...)--查询成功,SMS服务程序有N条收到的消息。


char *ReadMsg();

功能:读取一条消息

参数说明:无

返回:""--读取失败,SMS服务程序无响应

"EMPTY"--读取成功,但SMS服务程序内没有收到的消息。

"OA:..."--读取成功,而且SMS服务程序有收到的消息。

具体格式

"OA:发送方号码 TIME:接收到该消息的时间 UD:消息内容"


四、数据库接口

除API接口外,我们的网关平台同时提供了数据库接口,使集成方式更加灵活易用。只需要访问SMS_TOREAD表和SMS_TOSEND表即可。支持各种数据库,包括Access,MS SQL Server,Oracle等。


五、OCX控件

标准OCX控件,广泛用于各种开发工具中,

1.提供了ConnectModem,DisConnectModem,SendMsg,RecvMsg等方法,
2.提供了OnSendMsg,OnRecvMsg,OnConnectResult事件。

-----------------------------------------------
http://www.smset.com 飞天短信设备网
-----------------------------------------------

联系电话: 13194988075 李先生
8cet8 2004-04-29
  • 打赏
  • 举报
回复
是这个么:
MessageContent = new String(bt,"ISO-10646-UCS-2").trim();
dillonwang 2004-04-27
  • 打赏
  • 举报
回复
j2me上面一般都支持UNICODE,你最好转换成UNICODE显示!
static public String convertUTF8String2Unicode(String instr)
throws IOException {
//byte[] strbytes = instr.getBytes();
int charindex = instr.length();
int actualValue;
int inputValue;
StringBuffer sbtemp = new StringBuffer();
for (int i = 0; i < charindex;) {

actualValue = -1;
inputValue = instr.charAt(i++);

inputValue &= 0xff;

if ((inputValue & 0x80) == 0) {
actualValue = inputValue;
}
else if ((inputValue & 0xF8) == 0xF0) {
actualValue = (inputValue & 0x1f) << 18;

int nextByte = instr.charAt(i++) & 0xff;
if ((nextByte & 0xC0) != 0x80)
throw new IOException("Invalid UTF-8 format");
actualValue += (nextByte & 0x3F) << 12;

nextByte = instr.charAt(i++) & 0xff;
if ((nextByte & 0xC0) != 0x80)
throw new IOException("Invalid UTF-8 format");
actualValue += (nextByte & 0x3F) << 6;

nextByte = instr.charAt(i++) & 0xff;
if ((nextByte & 0xC0) != 0x80)
throw new IOException("Invalid UTF-8 format");
actualValue += (nextByte & 0x3F);
}
else if ((inputValue & 0xF0) == 0xE0) {
actualValue = (inputValue & 0x1f) << 12;

int nextByte = instr.charAt(i++) & 0xff;
if ((nextByte & 0xC0) != 0x80)
throw new IOException("Invalid UTF-8 format");
actualValue += (nextByte & 0x3F) << 6;

nextByte = instr.charAt(i++) & 0xff;
if ((nextByte & 0xC0) != 0x80)
throw new IOException("Invalid UTF-8 format");
actualValue += (nextByte & 0x3F);
}
else if ((inputValue & 0xE0) == 0xC0) {
actualValue = (inputValue & 0x1f) << 6;

int nextByte = instr.charAt(i++) & 0xff;
if ((nextByte & 0xC0) != 0x80)
throw new IOException("Invalid UTF-8 format");
actualValue += (nextByte & 0x3F);
}
sbtemp.append((char) actualValue);
}
return sbtemp.toString();
}
可以参考以下!
zjq1980 2004-04-27
  • 打赏
  • 举报
回复
new String(MessageByte,"UTF-16BE");

8cet8 2004-04-27
  • 打赏
  • 举报
回复
up
8cet8 2004-04-21
  • 打赏
  • 举报
回复
无人帮忙吗?各位大虾!!!

790

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 其他移动相关
社区管理员
  • 移动开发其他问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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