用Delphi编程来处理Unicode,当然是要用WideString字符串数据类型的。<br>当然,WideString只是Unicode的机内处理机制。为了在界面上正确地显示一个字符,还必须要有相应的字体才行。比如,WinXP是支持Unicode的,但如果系统中没有安装西班牙文的字体的话,是不能在简体中文版WinXP上显示西班牙文的。相同的道理也存在于其他非本地语言的字符集中。<br>至于楼主说的从Unicode控件取出来的TEXT可能会变成?的问题,是由多方面原因造成的。其中很重要的一点就是我们现在主要使用的Delphi 7并不是一款Unicode软件,除了提供有一个WideString数据类型外,它对Unicode的支持是及其有限的。这会造成一个很麻烦的后果:用Delphi 7写的程序可能会在程序员并不“知情”的情况下进行Unicode和本地字符集间的转换。打个比方,界面上有两个Edit控件,一个是Delphi自带的TEdit,一个是TntUnicode的TTntEdit。其中前者不是Unicode控件,后者是。如果程序中有这么一句的话:Edit1.Text:=TntEdit1.Text。那么这个过程可就不是单纯地把TntEdit1的文本复制到Edit1就完了,其中还要先把TntEdit1的文本先转换为本地语言字符集的文本才会复制。而在转换过程中,那些在本地语言字符集中没有相应字符的Unicode字符就会被显示为?了。比如,在西班牙文版的WinXP上,TEdit控件是不能显示汉字的,即使你把这个TEdit控件的字符设为宋体,而且系统中也安装了宋体字体也不行。原因就在于TEdit不是Unicode控件,它只能显示本地语言字符集中的字符。