解码问题:delphi函数的默认”解码方式“?
环境:delphi2010
任务:utf-8?Q、iso-2022-jp?B、iso-2022-jp?Q等情况的解码
情况描述:
1、一开始本人碰到一些iso-2022-jp?B类型代码,例如
“GyRCUn1SfRsoQg==” 解码应当为“哈哈”
不过使用delphi自带的Base64解码函数DecodeString(参照http://hi.baidu.com/cobala/item/7ddd51245498c94247996249)
解码结果“$BR}R}(B”
,即其默认解码方式为"utf-8"。
该情况本人尝试很久,稀里糊涂居然解决了,大概过程就是将base64码改变后变成Tstream(网上的一个base64tostream函数),然后用tsringlist的loadfromstream(Tstream,iso-2022-jp的encoding)的方式,tstringlist.text就是解码后正确结果。
2、后来又碰到一些utf-8?Q的代码,例如
“=E4=B8=AD=E5=9B=BD” 解码应当为“中国”
本人找了N久也没在网上找到一个能用的函数,后来听说Indy自带的IDCoderQuotedPrintable组件能解决,本人尝试后结果如下:
procedure Tform1.bitbtn1click(sender:tobject);
var
str:string;
begin
str:='=E4=B8=AD=E5=9B=BD';
edit1.text:=TIdDecoderQuotedPrintable.decodestring(str);
end;
结果见鬼的出来了“ä¸å½”这样的字符,我一查发现这是用iso-2022-jp的解码方式解出来的(可以用在线解码验证http://bianma.911cha.com/)。。。。。这是怎么回事?
请教:
1、各位大大们有没有集成化得函数能一次性解决各种国际编码的解码问题?
2、Delphi的这些解码函数的默认解码方式怎么知道?网上对这些函数的介绍好少。