输出:周期:从11--10到13--10
上面的输出来自如下一行: FormatDateTime('dd-mmm-yy',dateValue)
集成开发环境是Delphi 2007,我们正在努力让我们的应用程序适应中国市场。如何显示正确的字符?
随着设置转向印地语(印度),而不是有趣的字符,我有"?“。
我正在尝试使用ReportBuilder 11在报告上显示日期。
任何帮助都将不胜感激。
发布于 2011-01-11 18:22:15
这些字符看起来是正确的,只是我认为它们是错误的。
下面是我所做的:
使用CP 1252 (Windows 13-Ê®¶þÔÂ-10");
)
所以,这就是为什么我认为这是一个文本渲染(或者无论你怎么叫它,我不是很确定这个术语)的问题。
EDIT:当然,这一定与存储字符串所选择的数据类型有关。如果函数结果是AnsiString,变量是WideString,那么字符可能会被转换为WideChars,因此它们不再是多字节字符的单字节组合,而是多字节字符本身吗?至少当特工把他们放在这里的时候是这样的。
实际上我不知道,但如果是这样的话,我怀疑它们是否可以正确呈现,除非转换回来并作为AnsiString的一部分呈现。
发布于 2011-01-11 20:48:23
另一种解决方案是使用TntControls。它们是一组标准的Delphi控件,增强了对Unicode的支持。你必须仔细检查你所有的表格文件并替换
Button1: TButton
Label1: TLabel使用TTntButton、TTntLabel等。
请注意,在目前的情况下,不仅仅是中文不能工作。尝试使用除标准欧式设置(拉丁语+重音符号等)之外的任何语言,例如俄语。
但
通过替换控件,您将解决问题的一部分。另一个部分是,在使用"string“或"AnsiString”和"char/pchar“或"AnsiChar/PAnsiChar”的地方,只能存储默认系统编码的字符串。
例如,如果您的系统编码(“非unicode程序的语言”)是EN/US,则当您将俄语字符分配给"string“变量时,俄语字符将被问号替换:
a: WideString;
b: string;
...
a := 'ЯУЭФЫЦ'; //WideString can store international characters
b := a; //string cannot, so the data is lost - you cannot restore it from just "b"要存储独立于系统编码的字符串数据,请使用WideString/WideChar/PWideChar和相应的函数。如果你有
a, b: WideString;
...
a := UpperCase(b);那么unicode信息仍然会丢失,因为UpperCase()接受"string":
function UpperCase(const S: string): string;您的字符串将被转换为“WideString”(丢失所有国际字符),并提供给UpperCase,然后结果将被转换回WideString,但为时已晚。
因此,您必须将所有字符串函数替换为宽版本:
a := WideUpperCase(b);(对于一些函数,它们的宽版本是不可用的,或者调用方式不同,TntControls还包含一堆宽版本的函数)
发布于 2011-01-11 15:38:44
中国市场要求支持多字节字符集( WideChar或Unicode)。
Delphi2007RTL/VCL只支持单字节字符集(在RTL和VCL中对WideChar的支持非常有限)。
对你来说最简单的是升级到支持Unicode的Delphi版本(Delphi 2009是第一个支持Unicode的版本,当前的Delphi版本是Delphi XE)。
否则,您将需要更新所有组件以支持WideChar,并重写需要WideChar支持的RTL/VCL部分。
--jeroen
https://stackoverflow.com/questions/4652130
复制相似问题