纪念经典的 D7(Delphi 7编码转换程序)

很喜欢Delphi 7,以前一直用它写好多有趣的程序,虽然不是专业程序员。

但我很奇怪的是,大家没写一些公用的单元,一起大家交流的,大概觉得写得挺好的代码,几乎都是Google抄的,国内的百度几乎代码不好用,也许是国内优秀程序员不屑把优秀代码贴出来的吧。

为纪念D7,我单独写了一个单元,D7EncodedText.pas,他用的简单的原理实现Unicode,Gb2312,UTF32之间的转换。主要是将各种格式的string当字节使用,在各种格式之间转换就容易得多的,这思路,查了下,外国的比较多,而国内的少。

最近,更新了些功能,可以将16进制数据直接存为bin文件(点右键之类的出来),以便可以直接将看见的HexStr存为数据,例如RichEdit中显示的0x65存为到bin文件后,UltraEdit打开,16进制观察就是65。


下载地址(新更新了下,含其他一些有趣函数,新增加1个老外汇编写的单元FReplace.pas,以取代delphi自带的StringReplace太慢的问题,需采用FastReplace函数):

http://pan.baidu.com/s/16Lo1g

在D7EncodedText.pas中的主要函数,其中好几个函数还是借鉴老外的代码,的确很优秀,不过还是请大家有空帮我改改UTF32- >Ansistring(CoderToUtf32Str函数),我的方法只是临时解决的方案,虽然我的不报错但不正规;若最后不设置长度,很容易内存泄露,多点几次会报错,原因不明

  function  UnicodeSave(const FileName:string;WS:widestring):boolean;
  function  UnicodeRead(const FileName:string):WideString;

  function  UnicodeBigSave(const FileName:string;WS:widestring):boolean;
  function  UnicodeBigRead(const FileName:string):WideString;
  
  function  UTF8Save(const FileName:string;WS:widestring):boolean;
  function  UTF8Read(const FileName:string):WideString;


  function  AnsiSave(const FileName:string;WS:widestring):boolean;
  function  AnsiRead(const FileName:string):WideString;


  function GetTextType(const FileName: string): String;   //返回文本格式信息


  function TextRead(const FileName:string):FReadText; //读取各种格式
  function TextSave(const FileName:string;WS:widestring):boolean;  //保存原格式


  function UnicodeEncode(Str:string;CodePage:integer):WideString;  //unicode编码
  function UnicodeDecode(Str:WideString;CodePage:integer):string;  //unicode解码


  function WStrToStr(const ws: WideString; codePage: Word): AnsiString; //宽字符串转单字符串,等同于UnicodeEncode
  function StrToWStr(const s: AnsiString; codePage: Word): WideString;  //单字符串转宽字符串,等同于UnicodeDecode
//  function WideStringToUCS4String(const ws : WideString) : UCS4String;


  function HexToInt(s: string): Integer;    //IntToHex函数,D7自带;实际应该写为HexStrToInt
  function IntToBinStr(i: integer): string;  //integer范围signed 32-bit
  function ByteToHexStr(AByte : Byte ) : string;    //单字节处理
  function HexStrToByte(HexS: String ) : Byte;     //2位16进制字符串转为1个字节
  function HexStrToDec(HexStr: AnsiString):AnsiString; //按每2位Hex字符转换为3位十进制数字字符串


  //以下是连续字符和字节的处理
  function BytesOf(const Val: AnsiString): TBytes;                        //Ansistring字符串的字节数组形式
  function HexStrToBytes(const HexStr: AnsiString): TBytes;               //连续的16进制数的字节数组形式
  function BytesToHexStr(ABytes: TBytes; len: Integer): AnsiString;       //字节数组的 Ansistring字符串形式


  //机内码 转 Ansi(GB2312)字符,中文系统下:16进制/无空格分隔 ;   分隔字符串当然不能是0..9,A..F,a..f
  function CoderToAnsiStr(HexS: String;const Delimited:string=''):String;
  function CoderToUTF8Str(HexS: String;const Delimited:string=''):String;  //机内码 转 Utf-8
  function CoderToUnicodeStr(HexS: String;const Delimited:string=''):String;   //机内码 转 unicode字符:默认16进制/无空格分隔
  function CoderToUnicodeBigEndianStr(HexS: String;const Delimited:string=''):String;   //机内码 转 unicodeBigEndian
  function CoderToUtf32Str(HexS: String;const Delimited:string=''):String;              //机内码 转 Utf-32
  function CoderToUtf32BigEndianStr(HexS: String;const Delimited:string=''):String;    //机内码 转 Utf-32 BigEndian


  function UTF8StrToCoder(S:String; const Delimited:string=''):string;        //Utf-8 转 机内码
  function AnsiStrToCoder(S: String;const Delimited:string=''):String;        //Ansi(包括GB2312,准确是当前的字符集)字符转机内码
  function UniCodeStrToCoder(S:String;const Delimited:string=''):String;             //unicode字符转机内码
  function UniCodeBigEndianStrToCoder(S:String; const Delimited:string=''):string;   //unicodeBigEndian字符转机内码
  function UTF32StrToCoder(S:String; const Delimited:string=''):string;          //  Utf-32 转 机内码
  function UTF32BigEndianStrToCoder(S:String; const Delimited:string=''):string; //Utf-32 BigEndian 转 机内码


  function  BinFileToHexStr(BinFileName:string):string;                         //按2进制文件读取文件为HexStr字符串(包括Bin文件)
  function  HexStrToBinFile(HexStr:string;BinFileName:string):Boolean;          //HexStr存为2进制文件



21:25 2014-10-10


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值