【问题标题】:Delphi - get encoding for a given fileDelphi - 获取给定文件的编码
【发布时间】:2012-02-02 17:28:15
【问题描述】:

我已经阅读了这个问题,我认为它会给我我所追求的:

How Can I Best Guess the Encoding when the BOM (Byte Order Mark) is Missing?

我想知道是否有另一种方法来获取文件编码,而无需在 D2006 中使用 Mozilla 的 i18n 组件?我不能使用其他 3d 派对组件。

我已经阅读了原始问题的所有答案,我无法使用提供的界面,因为客户端不接受该 dll 的部署:

原始问题中提供的一些链接已经失效,没有一个可以解决我的问题,即:
如何在不使用 3rd 方组件的情况下获取文件编码?

【问题讨论】:

  • @RobKennedy - 它不是重复的。我在问题中提到过,我已经读过了。提到的问题的答案是在谈论尝试这个和尝试那个,而不是解决问题。提出问题的人正在使用此处提供的界面解决问题:sourceforge.net/projects/chsdet/files
  • 寻找BOM;如果没有找到 BOM,请用户设置编码。
  • 如果您对该问题的答案不满意,这并不意味着它仍然不是您所问的问题。该问题询问如何猜测文件编码。你问的是同样的事情。接受的答案是使用 Chardet,但还有其他答案,包括一个告诉您使用记事本算法,然后是其他几个算法描述。如果您不打算使用库,并且不喜欢内置 API,那么您将获得的only 答案是算法描述。您的问题与原问题有何不同?
  • 攻击答案的质量并不能让我相信这是一个不同的问题。答案并不重要。您的问题与另一个问题提出的问题相同。至于提请注意一个老问题,我认为您的初始操作很好:重新提出问题。如果有新的答案,人们可​​以将它们添加到旧问题中。您也可以在旧问题上开始赏金。 Meta上有很多关于如何引起对旧帖子的关注的帖子。
  • 他要求“另一种获取文件编码的方法,在 D2006 中不使用 Mozilla 的 i18n 组件 [因为他] 不能使用其他 3d 派对组件。”对我来说似乎足够有效 - 他已经完成了他的研究,不幸的是不能使用另一个问题的答案,并且正在询问是否有替代方案。另一种选择(不同的答案)可能需要一个新问题,因为您不能对一个问题有两个公认的答案。

标签: delphi encoding delphi-2006


【解决方案1】:

我会先查找 BOM,如果找不到,请调用 IsTextUnicode。但请注意,没有任何方法是万无一失的。

【讨论】:

  • IsTextUnicode 应该小心处理。见this
  • @kobik 因此我的最后一句话。这是一门不精确的科学。
【解决方案2】:

确定文件的编码似乎是有问题的。似乎某些 UTF8 文件没有 BOM。这似乎有效:

InputData.LoadFromFile(f,TEncoding.UTF8);
if InputData.count=0 then
  InputData.LoadFromFile(f);

有没有更好的方法。我知道这个解决方案不是很优雅。

【讨论】:

  • 在调用LoadFromFile()之前使用TEncoding.GetBufferEncoding(),或者干脆省略Encoding参数,让LoadFromFile()在内部为你调用GetBufferEncoding()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
相关资源
最近更新 更多