Delphi 2009之前的版本已经有内置Unicode支持了。自Delphi 4以来就一直提供了WideString
类型,甚至更早。虽然WideString
不如新的UnicodeString
类型简洁,但它仍然包含16位的Unicode字符,并且你可以将其类型转换为PWideChar
,以便将字符串发送到Unicode API函数。 Windows
单元声明了大多数"wide"版本的API函数,如果您发现缺少某些函数,您也可以自行声明其他函数。
之前的版本没有的是VCL中的Unicode支持。此时,您可以使用Tnt Unicode控件。它们曾经是免费的。看起来还有几个地方可以找到最新的免费版本:(1),(2)。
JCL有几个用于处理Unicode的单元。 JclWideStrings
单元主要包含轻量级的实用程序函数。 JclUnicode
单元更全面,但也包括一个庞大的资源,用于确定所有Unicode字符的字符属性。
使用JCL,您有几种选择用于保存WideString
值列表的类。我认为Delphi 7甚至都有一个用于此目的的类。
不要认为仅因为您没有Delphi 2009就不能编写Unicode程序。
如果您有一个
WideString
值,并且想将其编码为UTF-8,则需要调用
Utf8Encode
函数。它将返回一个
AnsiString
值,或者如果您的Delphi版本声明了该类型,则可能返回
Utf8String
。但这与Delphi 2009的
Utf8String
类型不同。在赋值语句中,Delphi 2009会自动转换为
UnicodeString
或
AnsiString(x)
,反之亦然。而之前的版本只有一个
AnsiString
类型,因此您需要自己跟踪哪些变量保存UTF-8数据,哪些保存Ansi数据(在变量和参数名上使用匈牙利命名法可以帮助您进行跟踪)。当然,还有一个
Utf8Decode
函数,用于将UTF-8数据转换回
WideString
。
对于处理其他字符编码,您可以查看Delphi的免费XML库
Open XML。作为其XML处理的一部分,它支持在70种不同编码之间转换。