gpt4 book ai didi

delphi - TMemIniFile.Create 中德语元音变音字符异常

转载 作者:行者123 更新时间:2023-12-02 04:21:56 43 4
gpt4 key购买 nike

我有一个 .URL 文件,其中包含以下文本,其中包含德语变音字符:

[InternetShortcut]
URL=http://edn.embarcadero.com/article/44358
[MyApp]
Notes=Special Test geändert
Icon=default
Title=Bug fix list for 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;

这是来自调试器的错误消息文本:

Project MyApp.exe raised exception class EEncodingError with message 'No mapping for the Unicode character exists in the target multi-byte code page'.

当我从 .URL 文件中删除带有德语变音字符“geändert”的单词时,就不会出现错误。

但这就是我使用TMemIniFile的原因,因为当.URL文件中的文本包含Unicode字符时,TIniFile在这里不起作用。 (.URL 文件中还可能存在其他 Unicode 字符)。

那么为什么我在 TMemIniFile.Create 中遇到异常?

编辑:找到罪魁祸首:.URL 文件采用 ANSI 格式。当 .URL 文件采用 UTF-8 格式时,不会发生此错误。但是当文件是 ANSI 格式时我该怎么办?

EDIT2:我创建了一种解决方法,可以同时使用 ANSIUTF-8 文件:

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;

你觉得怎么样?

最佳答案

一般来说,从文件内容自动检测文件的编码是不可能的。

Raymond Chen 的这篇文章清楚地证明了这一点:The Notepad file encoding problem, redux 。 Raymond 使用包含这两个字节的文件示例:

D0 AE

Raymond 继续表明,这是一个格式良好的文件,具有以下四种编码:ANSI 1252、UTF-8、UTF-16BE 和 UTF-16LE。

这里的教训是您必须知道文件的编码。要么按照惯例与编写该文件的人达成一致。或者强制存在 BOM。

关于delphi - TMemIniFile.Create 中德语元音变音字符异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559867/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com