【问题标题】:How to identify if a TBytes array may safely convert to AnsiString, string or UTF8String?如何识别 TBytes 数组是否可以安全地转换为 AnsiString、字符串或 UTF8String?
【发布时间】:2014-07-01 06:03:46
【问题描述】:

给定一个 TBytes 数组,我们能否确定该数组是否可以转换为 AnsiString、String 或 UTF8String 而不会丢失任何字符?

【问题讨论】:

  • 怎么转换的?字节数组是怎么编码的?
  • @DavidHeffernan:无法确定。它使用 ANSI、UTF8 或 Unicode。
  • 如果您不知道它是如何编码的,那么您就无法确定地做任何事情。不知道字节代表什么,怎么知道转换是否成功?
  • @DavidHeffernan:我可以使用LocaleCharsFromUnicode() 来测试字符串是 Ansi 还是 Unicode,并使用匹配的编码将字符串转换为 TBytes 数组。但是将 TBytes 数组转换回匹配的字符串似乎并不容易。
  • 对于 8 位字符,答案是 always yes,因为 字节根本没有编码。你必须更多地了解内容。另见msdn.microsoft.com/en-us/library/windows/desktop/dd318672

标签: delphi


【解决方案1】:

您似乎要求做的事情是不可能的。您似乎有一个来源未知的字节数组,它可能被编码为 ANSI、UTF-8 或 UTF-16。您希望能够确定哪种编码是正确的。

这是不可能的,因为存在在所有这三种编码中都有效的字节数组,并且在每种编码中代表不同的字符串。 Raymond Chen 在这里展示了一个很好的干净示例:The Notepad file encoding problem, redux

您可以使用启发式算法来尝试猜测编码,例如IsTextUnicode。但是任何这样的方法必然是不可靠的。

【讨论】:

  • 即使是 IsTextUnicode 也无法完成不可能的事情
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2010-10-28
  • 2019-02-15
相关资源
最近更新 更多