对不起,我的英语...
我正在尝试用Delphi7编写一个小程序。它的界面将有我的语言的文本,其中有一些带有变音符号的字符。如果将"Language for non-Unicode programs“设置为”my language“,这些字符总是可以正常显示。这很正常。如果设置为其他值,则有时显示良好,有时不显示。我如何知道它们是否可以正常显示...?哦,我不能使用Unicode组件,只能正常使用。
我发现的唯一方法是将一个字符的图像捕获到位图中,并逐个像素地检查。但它的实现有很多工作要做,既慢又不精确。
我可以使用GetSystemDefaultLangID函数,并且知道“用于非Unicode程序的语言”设置为其他值,但仍然不知道它们是否显示良好。
谢谢你的任何想法。
发布于 2011-04-09 20:56:38
欢迎来到使用代码页编码的AnsiStrings的乐趣。您根本不应该使用AnsiStrings,您也知道这一点,但是您没有解释就说您不能使用unicode控件。这对我来说似乎很奇怪。您应该使用以下两种方法之一:
(a) Delphi (2009,2010,XE)的Unicode版本,其中String=UnicodeString。
(b)如果不是,至少使用适当的Unicode控件,例如TNT控件,并在需要存储重音字符或国际字符的地方在内部使用WideString类型。
您的Delphi版本具有String=AnsiString,并且您依赖于系统设置的语言环境(如您在问题中所说的)来选择重音字符的代码页表示,这是一个有问题的方案。如果你真的不能从Delphi7升级,至少开始使用WideStrings和TNT Unicode控件,但我必须说,这些努力都是浪费的,你最好获得Delphi,然后直接移植到Unicode。
您的问题是“我如何知道它们是否可以很好地存储?”您可以使用您的代码页进行编码和解码,并检查是否有任何内容被"?“替换。例如,窗口函数WideCharToMultiByte的行为是这样的。MBCS是一个痛苦的世界,不值得去做,但您问到如何才能找出地板从哪里掉下来,这样API就可以帮助您理解所选的编码规则。
发布于 2011-04-10 00:03:22
使用WideCharToMultiByte函数- http://msdn.microsoft.com/en-us/library/dd374130(v=vs.85).aspx并检查lpUsedDefaultChar参数。
发布于 2011-04-09 16:57:27
procedure TForm1.Button2Click(Sender: TObject);
var
ACP: Integer;
begin
ACP := GetACP;
Caption := 'CP' + IntToStr(ACP);
if ACP = 1250 then
Caption := Caption + ' is okay for Romanian language';
end;https://stackoverflow.com/questions/5603777
复制相似问题