delphi 7中的utf8decode

时间:2012-02-07 13:36:07

标签: delphi unicode delphi-7

我需要使用delphi 7将字符串从utf8转换为widestring。谁能告诉我为什么以下代码在delphi 7中不起作用? Utf8Decode函数的参数只是一个样本。

var ws: WideString;
begin
   ws := Utf8Decode('[أمبير] خطأ تيار- تيار Ů…ŘŞŮاصل Ů…Ř·Ů„Ů‚');
end;

在delphi 7中,它给了我很多问号,但是在bds2006中它运作良好。

我是否需要切换某些编译器指令,或者如何在delphi 7中将utf8String转换为Widestring?

Utf8Decode功能没有任何问题,Delphi Code Insight Tooltip表达式评估输出误导了我,它无法显示Widestrings。见下图:

Tooltip expression evaluation

但是MessageBoxW可以显示文本:

enter image description here

1 个答案:

答案 0 :(得分:6)

我认为问题在于Delphi 7只能使用ANSI作为源文件。更高版本的Delphi将使用UTF-8作为源文件,事实上,您可以指定要用于源文件的编码。

如果将UTF-8编码的字符串解释为ANSI(例如使用Notepad ++),则可以在ANSI源代码文件中嵌入UTF-8编码的字符。例如,此代码使用Delphi 6生成带有文本的消息框。

ws := UTF8Decode('[ŘÅمبير] خط؊تيار- تيار Ů…ŘŞŮاصل Ů…Ř·Ů„Ů‚');
MessageBoxW(0, PWideChar(ws), 
  PWideChar(WideString(FloatToStr(CompilerVersion))), 0);

enter image description here

尝试像这样处理你的字符串文字是不切实际的。您可能需要开始将它们放入资源中。