gpt4 book ai didi

delphi - 在 Delphi 版本 <= 2007 中处理 Unicode 字符串

转载 作者:行者123 更新时间:2023-12-03 14:37:56 25 4
gpt4 key购买 nike

背景:此问题与 2009 年以下的 Delphi 版本相关(即没有内置 Unicode 支持)。我有一个规范,要求我通过 TCP 连接传输 Unicode 编码的字符串,但我没有 Delphi 2009。

问题是否有一个函数或非常小的库(我不需要太多)可以用来在通过网络发送之前将单个字符串编码为 UTF-8?作为我的问题的第二部分:如果有 UTF-8 编码的字符串作为响应发送回来,我想我需要另一个函数将其恢复为 Delphi 字符串格式。我通过这种方式了解了这种 Unicode 支持的局限性。

最佳答案

Delphi 2009 之前的 Delphi 版本确实内置了 Unicode 支持。我认为,WideString 类型自 Delphi 4 起就可用了,也许更早。 WideString 不如新的 UnicodeString 类型那么好,但它仍然保存 16 位 Unicode 字符,并且您可以将其类型转换为 PWideChar 将字符串发送到 Unicode API 函数。 Windows 单元声明了 API 函数的大多数“宽”版本,如果您发现某些函数缺失,没有什么可以阻止您自己声明其他函数。

之前的版本没有 VCL 中的 Unicode 支持。为此,您可以使用Tnt Unicode 控件。他们曾经是自由的。看起来有几个地方仍然可以使用最新的免费版本:(1) , (2) .

JCL有几个用于处理 Unicode 的单元。 JclWideStrings 单元主要具有轻量级实用函数。 JclUnicode 单元更加完整,但它还包含大量资源,用于确定所有 Unicode 字符的字符属性。

使用 JCL,您可以选择多种类来保存 WideString 值列表。我认为 Delphi 7 甚至为此提供了一个类。

不要以为没有 Delphi 2009 就不能编写 Unicode 程序。

如果您有一个 WideString 值,并且希望将其编码为 UTF-8,请调用 Utf8Encode 函数。如果您的 Delphi 版本声明了该类型,它将返回一个 AnsiString 值,或者可能返回 Utf8String。不过,它与 Delphi 2009 的 Utf8String 类型不同。 Delphi 2009 将在赋值语句中自动转换为UnicodeStringAnsiString(x),反之亦然。之前的版本只有一个 AnsiString 类型,因此您需要自己跟踪哪些变量保存 UTF-8 数据,哪些变量保存 Ansi 数据。 (变量和参数名称上的匈牙利表示法可以帮助您跟踪。)当然,还有一个 Utf8Decode 函数用于将 UTF-8 数据转换回 宽字符串

要处理其他字符编码,您需要查看 Open XML ,Delphi 的免费 XML 库。作为 XML 处理的一部分,它支持 70 种不同编码之间的转换。

关于delphi - 在 Delphi 版本 <= 2007 中处理 Unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/383195/

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