zoukankan      html  css  js  c++  java
  • 几个关于文本文件、字符串、编码的函数

    {

    在delphi中没有能把字符串直接保存为文件的方法,也没有将文件直接作为字符串读出的方法。

    没有能把字符串转化为内存流的方法,也没有能把内存流转化为字符串的方法。而这里有四个函数恰能做到。

     

    代码如下:

    }

    function StringToFile(mString: string; mFileName: TFileName): Boolean;

    { 返回字符串保存到文件是否成功 }

    var

    vFileChar: file of Char;//通常是以行为单位,将依次写入每一行,而这里是字,则将依次写入每个字

    I: Integer;

    begin

    {$I-}

    AssignFile(vFileChar, mFileName);

    Rewrite(vFileChar);

    for I := 1 to Length(mString) do

    Write(vFileChar, mString[I]);

    CloseFile(vFileChar);

    {$I+}

    Result := (IOResult = 0) and (mFileName <> '');

    end; { StringToFile }

    function FileToString(mFileName: TFileName): string;

    { 返回从文件载入字符串 }

    var

    vFileChar: file of Char;

    vChar: Char;

    begin

    Result := '';

    {$I-}

    AssignFile(vFileChar, mFileName);

    Reset(vFileChar);

    while not Eof(vFileChar) do begin

        Read(vFileChar, vChar);

        Result := Result + vChar;

    end;

    CloseFile(vFileChar);

    {$I+}

    end; { FileToString }

    function AnsiFileToString(mFileName: TFileName): Ansistring; //返回从文件载入字符串 }

    var

    vFileChar: file of  AnsiChar;

    vChar: AnsiChar;

    begin

    Result := '';

    {$I-}

    AssignFile(vFileChar, mFileName);

    Reset(vFileChar);

    while not Eof(vFileChar) do begin

        Read(vFileChar, vChar);

        Result := Result + vChar;

    end;

    CloseFile(vFileChar);

    {$I+}

    end; { AnsiFileToString }

    function StreamToString(mStream: TStream): string;

    { 将内存流转换成字符串 }

    var

    I: Integer;

    begin

    Result := '';

    if not Assigned(mStream) then Exit;

    SetLength(Result, mStream.Size);

    for I := 0 to Pred(mStream.Size) do try

        mStream.Position := I;

        mStream.Read(Result[Succ(I)], 1);

    except

        Result := '';

    end;

    end; { StreamToString }

    function StringToStream(mString: string; mStream: TStream): Boolean;

    { 返回将字符串保存到内存流是否成功 }

    var

    I: Integer;

    begin

    Result := True;

    try

        mStream.Size := 0;

        mStream.Position := 0;

        for I := 1 to Length(mString) do mStream.Write(mString[I], 1);

    except

        Result := False;

    end;

    end; { StringToStream }

    //一个把字符转换成各种编码文件的delphi2010函数.

       procedure SaveFile( const  FileName:  string ; Source:  string ;

        encoding: TEncoding);

      var

        sl: TStrings;

        memoStream: TFileStream;

        buff: Tbytes;

        LByteOrderMark: TBytes;

      begin

         if  Source  =   ' ' then

            exit ;

        try

          buff : =  encoding.GetBytes(Source);

          memoStream : =  TFileStream.Create(FileName, fmCreate);

          LByteOrderMark : =  encoding.GetPreamble;

          memoStream.Write(LByteOrderMark[ 0 ], Length(LByteOrderMark));

          memoStream.Write(buff[ 0 ], length(buff));

               memostream.s

        finally

          memoStream.Free;

         end ;

       end ;

        

       {SaveFile('C:Temp est_' + 'ascii_gbk.txt', ss, TEncoding.GetEncoding(936));//gbk

          SaveFile('C:Temp est_' + 'ascii_bg5.txt', ss, TEncoding.GetEncoding(950));//bg5 繁体

          SaveFile('C:Temp est_' + 'utf8.txt', ss, TEncoding.UTF8);

          SaveFile('C:Temp est_' + 'unicode.txt', ss, TEncoding.Unicode);

    unicode转中文的时候必须要制定页码,不然会出现乱码.比如的以下这两句.

      SaveFile('C:Temp est_' + 'ascii_gbk.txt', ss, TEncoding.GetEncoding(936));//gbk

      SaveFile('C:Temp est_' + 'ascii_bg5.txt', ss, TEncoding.GetEncoding(950));//bg5 繁体}

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    unit util_utf8;
     
    interface
     
    uses Windows;
     
    type
     UTF8String = AnsiString;
     
    function AnsiToWide(const S: AnsiString): WideString;
     function WideToUTF8(const WS: WideString): UTF8String;
     function AnsiToUTF8(const S: AnsiString): UTF8String;
     function UTF8ToWide(const US: UTF8String): WideString;
     function WideToAnsi(const WS: WideString): AnsiString;
     function UTF8ToAnsi(const S: UTF8String): AnsiString;
     
    implementation
     
    function AnsiToWide(const S: AnsiString): WideString;
     var len: integer;
     ws: WideString;
     begin
     Result:='';
     if (Length(S) = 0) then
     exit;
     len:=MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, nil, 0);
     SetLength(ws, len);
     MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, PWideChar(ws), len);
     Result:=ws;
     end;
     
    function WideToUTF8(const WS: WideString): UTF8String;
     var len: integer;
     us: UTF8String;
     begin
     Result:='';
     if (Length(WS) = 0) then
     exit;
     len:=WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, nil, 0, nil, nil);
     SetLength(us, len);
     WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, PChar(us), len, nil, nil);
     Result:=us;
     end;
     
    function AnsiToUTF8(const S: AnsiString): UTF8String;
     begin
     Result:=WideToUTF8(AnsiToWide(S));
     end;
     
    function UTF8ToWide(const US: UTF8String): WideString;
     var len: integer;
     ws: WideString;
     begin
     Result:='';
     if (Length(US) = 0) then
     exit;
     len:=MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, nil, 0);
     SetLength(ws, len);
     MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, PWideChar(ws), len);
     Result:=ws;
     end;
     
    function WideToAnsi(const WS: WideString): AnsiString;
     var len: integer;
     s: AnsiString;
     begin
     Result:='';
     if (Length(WS) = 0) then
     exit;
     len:=WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, nil, 0, nil, nil);
     SetLength(s, len);
     WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, PChar(s), len, nil, nil);
     Result:=s;
     end;
     
    function UTF8ToAnsi(const S: UTF8String): AnsiString;
     begin
     Result:=WideToAnsi(UTF8ToWide(S));
     end;
     
    end.     

  • 相关阅读:
    递归
    作业 3月24日
    生成器
    迭代器
    解决python print 字符串 编码报错现象 unencode
    模式匹配迅速入手——ahocorasick第三方数据库的使用
    删除oracle部分数据
    html_获取参数
    ahocorasick从安装到使用
    Java 遍历map的四种方法
  • 原文地址:https://www.cnblogs.com/bjxsky/p/4641486.html
Copyright © 2011-2022 走看看