我有一个 .URL 文件,其中包含以下文本,其中包含德语变音字符:
[互联网快捷方式]
URL=http://edn.embarcadero.com/article/44358
[我的应用]
注释=特殊测试 geändert
图标=默认
标题=RAD Studio XE8 的错误修复列表
我尝试加载文本TMemIniFile
:
uses System.IniFiles;
//
procedure TForm1.Button1Click(Sender: TObject);
var
BookmarkIni: TMemIniFile;
begin
// The error occurs here:
BookmarkIni := TMemIniFile.Create('F:\Bug fix list for RAD Studio XE8.url',
TEncoding.UTF8);
try
// Some code here
finally
BookmarkIni.Free;
end;
end;
这是来自调试器的错误消息文本:
项目 MyApp.exe 引发异常类 EEncodingError 并带有消息
'目标多字节中不存在 Unicode 字符的映射
代码页'。
当我从 .URL 文件中删除带有德语变音字符“geändert”的单词时,就没有错误了。
但这就是我使用的原因TMemIniFile
, 因为TIniFile
当 .URL 文件中的文本包含 Unicode 字符时,此处不起作用。 (.URL 文件中还可能存在其他 Unicode 字符)。
那么为什么我在这里遇到例外TMemIniFile.Create
?
EDIT:找到罪魁祸首:.URL 文件位于ANSI
格式。当 .URL 文件位于UTF-8
格式。但是当文件在时我能做什么ANSI
format?
EDIT2:我创建了一个解决方法,可以同时使用ANSI
and UTF-8
files:
procedure TForm1.Button1Click(Sender: TObject);
var
BookmarkIni: TMemIniFile;
BookmarkIni_: TIniFile;
ThisFileIsAnsi: Boolean;
begin
try
ThisFileIsAnsi := False;
BookmarkIni := TMemIniFile.Create('F:\Bug fix list for RAD Studio XE8.url',
TEncoding.UTF8);
except
BookmarkIni_ := TIniFile.Create('F:\Bug fix list for RAD Studio XE8.url');
ThisFileIsAnsi := True;
end;
try
// Some code here
finally
if ThisFileIsAnsi then
BookmarkIni_.Free
else
BookmarkIni.Free;
end;
end;
你怎么认为?