我的应用程序是使用Delphi 7编写的非Unicode应用程序。
我想使用以下函数将Unicode字符串转换为ANSI:
function convertU(ws : widestring) : string;
begin
result := string(ws);
end;
我也使用这段代码来设置正确的代码页进行转换。
initialization
SetThreadLocale(GetSystemDefaultLCID);
GetFormatSettings;
在VCL主线程中它运行得非常好,但在TThread中却不行,其中函数convertU的结果会出现一些问号'?'。
为什么在TThread中不能正常工作?
stringVar := wideStringVar;
就可以。其次,问题在于并非所有WideChar都可以直接转换为AnsiString;有些字符宽度超过一个字符,并且有些字符值无法用AnsiChar表示,有些字体不包含所有可能的Unicode值。如果你看到了?
,那就意味着你正在显示它们,这可能是第三个问题 - 线程不应该在没有使用Sychronize
的情况下访问GUI控件。由于您没有发布显示代码,很难确定是否是这个问题。 - Ken White