bal*_*azs 5 delphi unicode delphi-7
我需要使用delphi 7将字符串从utf8转换为widestring.谁能告诉我为什么以下代码在delphi 7中不起作用?Utf8Decode函数的参数只是一个示例.
var ws: WideString;
begin
ws := Utf8Decode('[???…?¨?Š?±] ?®?·?? ???Š?§?±- ???Š?§?± ?…????§?µ?„ ?…?·?„?‚');
end;
Run Code Online (Sandbox Code Playgroud)
在delphi 7中,它给了我很多问号,但是在bds2006中它运行良好.
我是否需要切换一些编译器指令,或者如何在delphi 7中将utf8String转换为Widestring?
解
Utf8Decode函数没有任何问题,Delphi Code Insight Tooltip表达式评估输出误导了我,它无法显示Widestrings.见下图:

但是MessageBoxW可以显示文本:

我认为问题是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);
Run Code Online (Sandbox Code Playgroud)

试图像这样对待你的字符串文字是不切实际的.您可能需要开始将它们放入资源中.