2012-02-07 70 views
4

我需要使用delphi 7将字符串从utf8转换为宽字符串。有谁能告诉我为什么下面的代码在delphi 7中不起作用吗? Utf8Decode函数的参数只是一个示例。utf8decode in delphi 7

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

在德尔福7它给了我很多问号,但在bds2006它运作良好。

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

SOLUTION

有没有错Utf8Decode功能,德尔福代码智能工具提示表达式求值输出误导了我,它无法显示Widestrings。见下图:

Tooltip expression evaluation

但MessageBoxW可以显示文本:

enter image description here

+0

你想要做的第一件事是什么?你如何显示WideString输出?你真的需要UTF-8,WideString已经是Unicode吗?我很高兴在这里有更多的细节。 – 2012-02-07 16:03:28

+0

@JensMühlenhoffutf-8将来自xml文件,我想将它传递给需要宽字符串的另一个库函数。我使用调试器中的手表来检查值 – balazs 2012-02-07 16:19:47

+0

我知道这并不总是一个选项,但对于Unicode支持,考虑升级到最新版本的Delphi是非常值得的,因为Unicode支持最终才起作用。 – 2012-02-12 15:27:58

回答

5

我认为,问题是,德尔福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

试图把你的字符串字面这样是不实际与文本的消息框。您可能需要开始将它们放入资源中。

+1

我认为Delphi 7可以处理UTF-8编码文件。 .pas文件是Utf-8编码,没有BOM(用记事本++检查),它在Delphi IDE中正确显示。我将你的MessageBoxW部件粘贴到我的delphi 7代码中,并且它显示了正确的文本,看起来像Code insight不能显示横幅... – balazs 2012-02-07 16:42:07

+0

我不以这种方式存储utf-8字符串,我只是想给一个简单的例子..最后它证明了守则洞察误导了我。 utf8decode函数完美工作。谢谢。 – balazs 2012-02-07 16:53:07

+2

好的,但我仍然认为这是你问的问题的答案。 – 2012-02-07 16:55:28