有一个UCS2编码的txt文档,打开看是乱码,需要进行编码转换。
例程里面有VB的编码如下:
    Dim tmp1 As Byte
    Dim tmp2 As Byte
    Dim rddata As String
    
    Open App.Path & "\mt.txt" For Binary As #1
        Do While Not EOF(1)   ' 检查文件尾。
            Get #1, , tmp1
            Get #1, , tmp2
    
            rddata = rddata + ChrW(tmp2 * CLng(256) + tmp1)
        Loop
    Close #1
请高人帮忙转换成delphi的,100分相送谢谢!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     tmp1:byte;
     tmp2:byte;
     rdata:widestring;
     f:TextFile;
    begin
        rdata:='';
       AssignFile(F, '\mt.txt');
       Reset(F);
       while not Eof(F) do
       begin
            Read(F, tmp1);
            read(F, tmp2);
            rdata:=rdata+widechar(tmp2*256+tmp1);
       end;
       CloseFile(f);
    end;
      

  2.   

    Read(F, tmp1);
    这句出错了, EInOutError with message 'Invalid numeric input'.
      

  3.   

    这样试试:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     tmp1:char;
     tmp2:char;
     rdata:widestring;
     f:TextFile;
    begin
        rdata:='';
       AssignFile(F, 'e:\temp\t.txt');
       Reset(F);
       while not Eof(F) do
       begin
            Read(F,tmp1);
            read(F, tmp2);
            rdata:=rdata+widechar(ord(tmp2)*256+ord(tmp1));
       end;
       CloseFile(f);
      ShowMessage(rdata);end;
      

  4.   

    多谢,Read这句总是出错,后来我用BlockRead解决了,这样写的
    var
      Buffer:array[0..300] of Byte;
      Num:integer;
    begin
      ...
      AssignFile(F,'mt.txt');
      Reset(F);
      BlockRead(F,Buffer,2,Num);
      ...
    end;谢谢了,分都给你吧:)
      

  5.   

    while i<=300 do
       begin
          s:=s+widechar(Buffer[i+1]*256+Buffer[i]);
          i:=i+2;
       end;
    结贴!