我用Delphi 7编写了一个程序,用于搜索硬盘上的*.srt
个文件。此程序在备忘录中列出这些文件的路径和名称。现在我需要将这些文件从ANSI转换为UTF-8,但我还没有成功。
答案 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)
问题的正确答案 - 并且它不是简单的 - 基本上由树步骤组成:
但是此解决方案将返回包含输入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