gpt4 book ai didi

Delphi例程以任意语言以任意编码显示任意字节

转载 作者:行者123 更新时间:2023-12-03 15:46:44 28 4
gpt4 key购买 nike

我有一些字节流可能会或可能不会编码为 1) 扩展 ASCII、2) UTF-8 或 3) UTF-16。它们可能是英语、法语或中文。我想编写一个简单的程序,允许用户输入字节流,然后选择一种编码和一种语言,并查看以这种方式解释时字符串会是什么样子。或者简单地以 9 种可能的方式解释每个字符串并将它们全部显示出来。我想避免重复切换区域化。我正在使用 Delphi 2007。我想要做的事情可能吗?

最佳答案

在 Delphi 2009 或更高版本中,这会更容易,因为它支持 Unicode 并且可以透明地完成大部分工作。对于旧版本,您必须做更多的手动工作。

您要做的第一件事是将文本转换为通用代码页;最好是 UTF-16,因为这是 Windows 上的 native 代码页。为此,您可以使用 MultiByteToWideChar功能。对于 UTF-8 到 UTF-16,语言并不重要;对于“扩展 ASCII”,您需要选择适当的源代码页(例如用于英语和法语的 Windows-1252,以及 GB2312 或 Big5 或其他一些中文代码页 - 这取决于您期望收到的内容)。要存储这些,您可以使用 WideString,它直接存储 UTF-16。

一旦你有了这个,你必须以某种方式绘制文本 - 这需要你要么获得一个支持 Unicode 的控件(一个标签可能就足够了),要么编写一个,或者直接调用适当的 Windows API 函数绘制 - 这就是它可能会变得有点困惑的地方,因为有几个函数可以做到这一点。 TextOutW可能是这里最简单的选择,但另一个选择是 DrawText 。确保显式调用这些函数的 W 版本以便使用 Unicode。 (另请参阅相关问题 How do I draw Unicode text? )。

请注意:由于 CJK 统一 - 在 Unicode 中相同代码点对等效的中文汉字、日文汉字和韩文汉字字符进行编码 - 您需要选择与预期匹配的字体中文的种类,繁体或简体,以获得预期的渲染效果。引用 Michael Kaplan 的一篇有点相关的帖子:

What it comes down to is that there are many characters which can have four different possible looks:

  • Japanese will default to using MS UI Gothic (fallback to PMingLIU, then SimSun, then Gulim)
  • Korean will default to using Gulim (fallback to PMingLiu, then MS UI Gothic, then SimSun)
  • Simplified Chinese will default to using SimSun (fallback to PMingLiu, then MS UI Gothic, then Batang)
  • Traditional Chinese will default to using PMingLiu (fallback to SimSun, then MS Mincho, then Batang)

除非您想要/需要使用特定字体,否则请在列表中选择您想要使用的语言变体的第一个字体,因为这些是标准字体(在 XP 上,您将需要先启用东亚语言支持才能使用,在 Vista 及更高版本上,它们始终包含在内)。如果您这样做,那么Windows可能根本不渲染字符(而是显示丢失的字符字形),或者可能使用不适当的后备(例如简体中文的PMingLiu) - 确切的行为取决于您用于呈现文本的 API 函数。

关于Delphi例程以任意语言以任意编码显示任意字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12043808/

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