我需要使用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。见下图:
但是MessageBoxW可以显示文本:
答案 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);
尝试像这样处理你的字符串文字是不切实际的。您可能需要开始将它们放入资源中。