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

2023-12-08

我有一个 .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;

你怎么认为?


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

Raymond Chen 的这篇文章清楚地证明了这一点:记事本文件编码问题,redux。 Raymond 使用包含这两个字节的文件示例:



D0 AE
  

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TMemIniFile.Create 中德语元音变音字符异常 的相关文章

  • 如何将UTF-8编码的汉字从MySql正确导出到SQL

    过去三天我们正在与严重的问题作斗争 我们从PhpmyAdmin导出MySql数据库文件 数据库条目中写入的数据是带有UTF 8字符集的中文 导出后将其转换为拉丁字符集 现在我们正在将此数据库SQl文件导入到其他主机 我们在UTF 8和排序规
  • PHP 中的 JS charCodeAt 等效项(具有完整的 unicode 和 emoji 兼容性)

    我在 JS 中有一个简单的代码 如果涉及特殊字符 我无法在 PHP 中复制它 这是 JS 代码 参见JSFiddle https jsfiddle net h8oca3qg 5 用于输出 var str t char t and speci
  • ADODB 组件导致 Win7/Server 2008 上的访问冲突

    我有一段用 Delphi 2005 编写的代码 用于在 LDAP 中搜索用户的特定属性 当在 Windows 7 或 Server 2008 上运行时 我遇到访问冲突 但在 XP 或 2003 上则没有 Function IsSSOUser
  • 如何添加资源并使用它们

    在我的应用程序中 我想添加 2 个图像作为资源 我想使用这些图像 当我在应用程序中单击 是 按钮时 第一张图像将被设置为壁纸 当我在应用程序中单击 否 按钮时 第二张图像将被设置为桌面壁纸 提前致谢 regards 最简单的方法是创建一个文
  • 错误:使用 Microsoft WebService.dll 通过 Delphi7 规范化 XML

    我正在使用 Delphi7 修改旧项目以添加使用证书和签名 经过一番搜索后我发现XML 规范化函数 https learn microsoft com en us previous versions dd815358 v vs 85 但我无
  • DOMDocument 对我的字符串做了什么?

    dom new DOMDocument 1 0 UTF 8 str p Hello p var dump mb detect encoding str dom gt loadHTML str var dump dom gt saveHTML
  • jQuery:将 json 响应的编码设置为 utf8

    我收到了 json 格式的 jQuery 响应 逻辑工作正常 但我无法让他正确编码数据 如 我搜索并发现this https stackoverflow com questions 26620 how to set encoding in
  • 将以utf-8字符串为内容的unicode转换为str

    我正在使用 pyquery 来解析页面 dom PyQuery http zh wikipedia org w index php title CSS printable yes variant zh cn content dom mw c
  • 如何删除 utf-8 中无法识别的字符? mysql/php

    我有一个设置为 utf 8 的 mysql 数据库 我已将 php 标头设置为 header Content Type text html charset utf 8 在我的html中 当我返回任何带有圆引号或撇号的内容时 它们显示为无法识
  • 如何在Delphi XE中通过名称获取类类型引用?

    我实际上正在尝试使用 Rtti 来实现通用方法调用程序 它应该像这样工作 我将提供类名 方法名和参数 调用者将通过调用此类的指定方法来完成其工作 因此 我需要类引用才能获取其 Rtti 信息并寻找我想要调用的方法 有没有办法在不实现我想要使
  • 标准化 Unicode

    在Python中是否有一种标准方法来规范化unicode字符串 以便它只理解可用于表示它的最简单的unicode实体 我的意思是 可以翻译类似序列的东西 LATIN SMALL LETTER A COMBINING ACUTE ACCENT
  • 注释非法 Unicode 序列

    我曾经在一个处理 unicode 处理的 Java 应用程序上工作 像往常一样 我首先编写一些代码并测试它 然后注释掉工作代码并添加一些新行 这个过程一直持续到我找到解决方案 我遇到的确切问题是注释掉非法的 Unicode 字符串 有些 u
  • .Net 中包含希伯来字母和数字的 Unicode 字符串

    尝试创建包含希伯来字母和数字的字符串时出现奇怪的行为 数字将始终显示在字母的左侧 例如 string A u05E9 A Hebrew letter string B 23 string AB A B textBlock1 Text AB
  • 在 JButton 上显示 Unicode 字符

    我正在尝试显示这个 Unicode uD83D on a JButton文本 但当我编译时 它只显示未知字符的平方 托马斯给出了一个很好的答案 但请注意 为了避免猜测哪些已安装的字体支持字符或字符串 我们可以迭代可用的字体并使用canDis
  • 检查 Python 中的有效 utf8 字符串

    我正在从文件系统读取文件名 并且想将它们作为 JSON 编码数组发送 问题是文件系统上的文件可以以无效的编码存储 我需要处理这种情况以在将其传递给之前省略无效的文件名json dump 否则会失败 有没有办法检查我的字符串 文件名 是否包含
  • Microsoft 使用什么作为 Unicode 字符串的数据类型?

    我正在学习 C 的过程中 在 MSDN 上看到了一篇文章 http msdn microsoft com en us magazine dd861344 aspx http msdn microsoft com en us magazine
  • 在运行时按需更改组件类

    我的问题与这里的想法类似 替换delphi中的组件类 https stackoverflow com q 4685863 937125 但我需要改变一个specific按需组件类 这是一些伪演示代码 unit Unit1 TForm1 cl
  • 我可以让我的 Delphi 应用程序在特定时间(例如上午 12:00)启动,而不运行应用程序吗?

    我看到一个已安装的应用程序 它从供应商的网站提供一些 XML 数据并将其显示在主窗体窗口中 我想这很简单 但我注意到 即使我关闭系统托盘中的应用程序 明天早上 上午 12 00 正好 它也会再次弹出 这太酷了 我不确定它是用 Delphi
  • 使用Delphi检查HTML代码中是否有对象属性值

    如何使用Delphi检查HTML代码中是否有输入对象属性值 there isn t value attribute
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能

随机推荐