- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 .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:我创建了一种解决方法,可以同时使用 ANSI
和 UTF-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/
用户收到间歇性错误“无法创建文件“C:...\Filename.ini”。无法对打开了用户映射部分的文件执行请求的操作。” 我还没有找到太多关于此错误的信息来帮助理解发生了什么。 TMemIniFil
我一直在运行 Delphi XE6,并尝试将只读 INI 文件放入 EXE 文件中。 我已经解决了。另外,将文件加载到 TMemo 中也可以正常工作。 我定义了以下函数,将纯 TXT INI 文件从资
我有一个 .URL 文件,其中包含以下文本,其中包含德语变音字符: [InternetShortcut] URL=http://edn.embarcadero.com/article/44358 [M
我是一名优秀的程序员,十分优秀!