最近比较郁闷,网络上查到这段代码
近在做一个短信相关的项目。从联通网关deliver过来的短信都是ucs2编码的。在网上找了些资料,找到一些使用java语言本身带的api转换的代码,但没有合适的delphi源码,所以经研究后自己写了一个,很简单的:function Ucs2ToGBK(const InValue: string): string;
var
I: Integer;
begin
Result := '';
for I := 1 to length(InValue) div 2 - 1 do
Result := Result + WideChar(StrToInt('$' + IntToHex(Ord(InValue[2 * I - 1]), 2)
+ IntToHex(Ord(InValue[2 * I]), 2)));
end;事实上,这段代码可解汉字,不能解英文和数字,有误.我修改之后:
function Ucs2ToGBK(const InValue: string): string;
var
I: Integer;
begin
for i := 1 to length(InValue) div 2 - 1 do
begin
if StrToInt('$' + inttohex(Ord(InValue[2 * i - 1]), 2) + inttohex(Ord(InValue[2 * i]), 2)) >= 9999 then
begin
(str0<>'‵') then begin
result := result + WideChar(StrToInt('$' + inttohex(Ord(InValue[2 * i - 1]), 2)
+ inttohex(Ord(InValue[2 * i]), 2)));
end else
begin
result := result + WideChar(StrToInt('$' + inttohex(Ord(InValue[2 * i]), 2)));
end;
end;
end;
end;
能解码汉字和英文混合但问题是,有误码,例如把"大"解成"梦".证明是有问题的.结果,交给同时,用JAVA,只有一个函数就搞正确了,是UFT-16BE的格式码(UCS2的一种).而DELPHI确实没有.我现在在写DELPHI版本的网关,已经接通了SMGP,CMPP,还差联通,写好之后,可能年后会公布程序的....
现在很郁闷的,DELPHI版本的短信网关,,,居然,,不流行,都是C,JAVA的....DELPHI难道就?'N '
'Y" '
'`╲?QN?NS厲廹:[苮f/ 0 4 8 2 8 7嬿彄Qe|麀?嬪[苮N艝Pg,k!Ou(0 '
上面三个码,谁能解正确?请回复..谢谢!万分感谢.
近在做一个短信相关的项目。从联通网关deliver过来的短信都是ucs2编码的。在网上找了些资料,找到一些使用java语言本身带的api转换的代码,但没有合适的delphi源码,所以经研究后自己写了一个,很简单的:function Ucs2ToGBK(const InValue: string): string;
var
I: Integer;
begin
Result := '';
for I := 1 to length(InValue) div 2 - 1 do
Result := Result + WideChar(StrToInt('$' + IntToHex(Ord(InValue[2 * I - 1]), 2)
+ IntToHex(Ord(InValue[2 * I]), 2)));
end;事实上,这段代码可解汉字,不能解英文和数字,有误.我修改之后:
function Ucs2ToGBK(const InValue: string): string;
var
I: Integer;
begin
for i := 1 to length(InValue) div 2 - 1 do
begin
if StrToInt('$' + inttohex(Ord(InValue[2 * i - 1]), 2) + inttohex(Ord(InValue[2 * i]), 2)) >= 9999 then
begin
(str0<>'‵') then begin
result := result + WideChar(StrToInt('$' + inttohex(Ord(InValue[2 * i - 1]), 2)
+ inttohex(Ord(InValue[2 * i]), 2)));
end else
begin
result := result + WideChar(StrToInt('$' + inttohex(Ord(InValue[2 * i]), 2)));
end;
end;
end;
end;
能解码汉字和英文混合但问题是,有误码,例如把"大"解成"梦".证明是有问题的.结果,交给同时,用JAVA,只有一个函数就搞正确了,是UFT-16BE的格式码(UCS2的一种).而DELPHI确实没有.我现在在写DELPHI版本的网关,已经接通了SMGP,CMPP,还差联通,写好之后,可能年后会公布程序的....
现在很郁闷的,DELPHI版本的短信网关,,,居然,,不流行,都是C,JAVA的....DELPHI难道就?'N '
'Y" '
'`╲?QN?NS厲廹:[苮f/ 0 4 8 2 8 7嬿彄Qe|麀?嬪[苮N艝Pg,k!Ou(0 '
上面三个码,谁能解正确?请回复..谢谢!万分感谢.
解决方案 »
- delphi控件IdHTTPProxyServer,做代理服务器,如何替换网页中的内容
- 请教:如何将excel表中数据导入到oracle表?
- 利用ADO连接EXCEL(ODBC)后如何对其数据源进行读写操作(在线)
- Delphi7的注册和不注册有什么区别?有影响吗?
- 让IE死掉的5行代码,可以看看;
- 为什么有时对控件update or repaint时会有闪烁?
- HELP!!!! 请大伙帮帮忙!把VB的源码转为DELPHI的源码?
- 难道要问李维?!
- 使用IHTMLLinkElement时报错?
- 求教一条SQL语句
- FieldByName('LongString').AsString被截断如何处理
- 如何求前一天某个数据的平均值,拜托各位高手
所以它不能叫作“UCS2”,严格意义上的UCS2是指统一字符集的16-bit原生编码,也叫unicode(事实上是先有了unicode,后有的ISO-10646)。
你下载一个JCL库就好了,有各种编码之间转换的过程(Delphi的一个优点就是不管什么代码,只要你去找,就几乎肯定能找到free、opensource的东西 :)。
在www.delphi-jedi.org
帮个忙,,,我现在走如死胡同了,,搞不定.......
能不能给点代码?我黑晕..
我采取,收到网络过来的DLIVER的时候,立即解码,再缓存方式,成功.
以下为解码函数:
function DecodeWideString1(Value: string): WideString;
var
i: integer;
S: string;
begin
S := '';
for i := 1 to length(Value) do
S := S + IntToHex(Byte(Value[i]), 2);
Value := S;
result := '';
for i := 0 to (length(Value) div 4) - 1 do
begin
result := result + WChar(StrToInt('$' + Value[i * 4 + 1] + Value[i * 4 + 2]) shl 8
+ StrToInt('$' + Value[i * 4 + 3] + Value[i * 4 + 4]));
end;
end;
不过奇怪的是,即使如此,我把这个错误的码用JAVA的内置函数也可以正确解出.
费解,看来DELPHI没有完的啦....