由于程序的需要我的使用这种方式存取Unicode文件:
保存文件时:
 Stream := TMemoryStream.Create;
 Flag := $FEFF;
 Stream.Write(Flag, 2);
 Stream.SaveToFile('C:\Temp\bb.txt');
想有这样写文件:
 var
  WStr: WideString;
  FRes: TextFile;
begin
 AssignFile(FRes,'C:\Temp\BB.txt');
 Reset(FRes);
 WriteLn(FRes,TntEdit1.Text); // 这里出现读写错误
 CloseFile(FRes);
这样读文件:
 AssignFile(FRes,'C:\Temp\BB.txt');
 ReSet(FRes);
 ReadLn(FRes,WStr);
 TntEdit2.Text := WStr;
 CloseFile(FRes);
读是读出来了,可是读出来是乱码。
请各位指正!

解决方案 »

  1.   

    试试用流的方法来做:
    我用这样的方法还没遇到读不到的文本
    var
           s:TStringList;
    begin
            s := TStringList.Create();
            s.LoadFromFile('C:\Temp\BB.txt');
            //for i:=0 to s.count-1 do  //这是循环控制,自己根据实际改
            Memo1.Text:=s.Strings[i];   //i是文本行数
    end;
      

  2.   

    Reset(FRes);
     WriteLn(FRes,TntEdit1.Text); // 这里出现读写错误
    把Reset(FRes);改ReWrite(FRes);如果需要从后插入改Append
      

  3.   

    to  xuancaoer(当回复为''的时候请别给我分) :因为是修改以前的程序,所以还想有以前的方法操作文件。
      

  4.   

    to Rail100(每逢佳节倍思春)(能忘掉结果,未能忘记遇上) ReWrite(FRes);是“创建并打开”一个文件,不能保证原来的编码格式的。
      

  5.   

    请将UCS-16文本转换成 UTF-8格式再保存,
    读出时,再从UTF-8转换到 UCS-16.
      

  6.   

    to  ahjoe(强哥) 那不行吧?用UCS-16存是乱码,在转换成UTF-8不还是乱码?
      

  7.   

    // Unicode String --> ANSI string 中文格式编码
    // eg. 0031003200610062554A94B1658C --> 12ab啊钱斌
    // OK! 20030208 QB
    function UnicodeToAnsi(sStr:String):String;
    var
      sStr1: string;
      wStr: WideString;
      psStr1,psStr: PChar;
      iUnicode,i,len: Integer;
    begin
      sStr1:='';
      // 为sStr1申请200字节的空间
      for i:=1 to 200 do sStr1:=sStr1+'-';
      psStr1:=PChar(sStr1);
      len:=Length(sStr);
      i:=1;
      while i<=len do
      begin
        // '554a' --> chr(0x55)+chr(0x4a)
        psStr:=PChar(sStr)+i-1;
        HexToBin(psStr, psStr1, 2);
        // chr(0x55)+chr(0x4a) --> 21834
        iUnicode:=ord(sStr1[1])*256+ord(sStr1[2]);
        // 21834 --> '啊'
        wStr:=wStr+WideChar(iUnicode);
        i:=i+4;
      end;
      Result:=String(wStr);
    end;// ANSI String --> Unicode string 中文格式编码
    // eg. 12ab啊钱斌 --> 0031003200610062554A94B1658C
    // OK! 20010710 QB
    // function AnsiToUnicode(var s:WideString):String;
    function AnsiToUnicode(sStr:String):String;
    var
      i,len: Integer;
      cur: Integer;
      t: String;
      s: WideString;
    begin
      // WideString('1啊') --> '1啊'
      s:= WideString(sStr);
      Result:='';
      // Length(WideString('1啊')) = 2 !!!
      len:=Length(s);
      i:=1;
      while i<=len do
      begin
        // Unicode of '啊' --> 21834
        cur:=ord(s[i]);
        // 21834 --> '554a'
        FmtStr(t,'%4.4X',[cur]); // ???? <-- 钱勤
        Result:=Result+t;
        inc(i);
      end;
    end;
      

  8.   

    windy2000()大哥强,爱死你了,用你的函数解决了我的大问题,十二分感谢