如何使用Delphi 7将文本文件从ANSI转换为UTF-8?

时间:2009-04-02 18:24:00

标签: delphi utf-8 character-encoding delphi-7 ansi

我用Delphi 7编写了一个程序,用于搜索硬盘上的*.srt个文件。此程序在备忘录中列出这些文件的路径和名称。现在我需要将这些文件从ANSI转换为UTF-8,但我还没有成功。

6 个答案:

答案 0 :(得分:9)

Utf8Encode函数将WideString字符串作为参数并返回Utf-8字符串。

样品:

procedure ConvertANSIFileToUTF8File(AInputFileName, AOutputFileName: TFileName);
var
  Strings: TStrings;
begin
  Strings := TStringList.Create;
  try
    Strings.LoadFromFile(AInputFileName);
    Strings.Text := UTF8Encode(Strings.Text);
    Strings.SaveToFile(AOutputFileName);
  finally
    Strings.Free;
  end;
end;

答案 1 :(得分:1)

看一下GpTextStream,看起来它与Delphi 7一起使用。它能够在旧版本的Delphi中读取/写入unicode文件(尽管可以与Delphi 2009一起使用),并且应该有助于您的转换

答案 2 :(得分:0)

var
  Latin1Encoding: TEncoding;
begin
  Latin1Encoding := TEncoding.GetEncoding(28591);
  try
       MyTStringList.SaveToFile('some file.txt', Latin1Encoding);
  finally
      Latin1Encoding.Free;
  end;
end;

答案 3 :(得分:0)

请在开始编码之前阅读完整的答案。


问题的正确答案 - 并且它不是简单的 - 基本上由树步骤组成:

  1. 您必须确定计算机上使用的ANSI代码页。您可以使用Windows API中的GetACP()函数来实现此目标。 (重要:您必须在检索文件名后尽快检索代码页,因为用户可以更改代码页。)
  2. 您必须通过使用正确的CodePage参数调用MultiByteToWideChar()Windows API函数(在上一步中检索)将ANSI字符串转换为Unicode。在此步骤之后,您将获得包含文件名列表的UTF-16字符串(实际上是一个WideString)。
  3. 您必须使用UTF8Encode()或WideCharToMultiByte()Windows API将Unicode字符串转换为UTF-8。此函数将返回您需要的UTF-8字符串。
  4. 但是此解决方案将返回包含输入ANSI字符串的UTF-8字符串,这可能不是解决问题的最佳方法,因为ANSI函数返回时文件名可能已经损坏,因此不保证正确的文件名


    解决问题的正确方法是更复杂的方法:

    如果您希望确定您的文件名列表完全干净,则必须确保它不会转换为ANSI 。您可以通过明确使用文件处理API的“W”版本来完成此操作。在这种情况下 - 当然 - 您不能使用TFileStream和其他ANSI文件处理对象,但Windows API直接调用。

    不是,但是如果你已经建立了一个复杂的框架,例如TFileStream可能会对@ss有点痛苦。在这种情况下,最好的解决方案是创建一个使用适当API的TStream后代。

    我希望我的回答可以帮助您或任何必须处理同样问题的人。 (我不久前不得不这样做。)

答案 4 :(得分:0)

我只是这样做:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Strings := TStringList.Create;
end;  

procedure TForm1.Button3Click(Sender: TObject);
begin
   Strings.Text := UTF8Encode(Memo1.Text);
   Strings.SaveToFile('new.txt');
end;

已通过Notepad ++ UTF8(不含BOM)进行验证

答案 5 :(得分:-1)

您的意思是ASCII吗?

ASCII向后兼容UTF-8。 http://en.wikipedia.org/wiki/UTF-8