Delphi2010:编写代码来分配包含Unicode文字值的标题或从文本文件加载Unicode符号?

q9rjltbz  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(136)

如何在 Delphi 2010中编写Unicode程序?
我有英语Windows和“当前语言为非Unicode程序”是英语太.静态控件看起来不错,但如果我试图改变他们(标签.标题:= 'unicode值'或备忘录.LoadFromFile(textFilm))的文本看起来像:$^$&%*(#&#.
怎么修?

ha5z0ras

ha5z0ras1#

让我假设一堆事情,因为你没有给我很多数据来继续下去。
1.您以前使用过 Delphi ,并且知道基本类型名称,如String、Char等。
1.您可能不知道 Delphi 2007(char=Ansichar/string=Ansistring)和 Delphi 2009或更高版本(包括 Delphi 2010和XE)之间的Unicode差异,其中Char=UnicodeChar,String=UnicodeString。
1.你看到垃圾(在你的问题中表示为the text looks like $^$&%*(#&#.")的最常见原因是,如果你试图直接操作字节大小的AnsiCharacter数据,并以错误的方式将其强制转换为UnicodeString。
1.美赞臣还注意到,从您的一条评论中,您也遇到了包含Unicode字符的源代码没有保存为UTF8文件的问题.当我试图将Unicode字符放入源文件时 Delphi 会自动问我这个问题,我想您也看到了,并且回答正确(正确答案是肯定的).但是你的问题根本没有提到这一点,你真的应该尝试更新你的问题,以指定问题的来源。
x1c 0d1x的数据
这里是右击文件格式菜单,从中可以随时更改编码,推荐值为UTF8,如下图所示:



你一定要发布那些产生错误字符串值的代码,而不是从一个试图移植到Unicode Delphi 的大型应用程序开始(这是我在这里做的第四个也是最大的假设),而是从一些小的示例代码开始。
下面是一个“写得很糟糕代码”的例子,它碰巧在 Delphi 7中仍然可以工作,因为每个字符的大小都是一个字节,但是这个假设并不适用于2009年和XE Delphi :

procedure Tform1.TestBad;
var
 x:PAnsiChar;
 s:String;
begin
  x := 'test';
  s := Copy(PChar(x),1,10);
  Self.Caption := s;
end;

字符串
这里有相同的人为的示例代码“固定”(更像是无意破坏),所以它至少可以在 Delphi XE中工作:

procedure Tform1.TestLessBad;
var
 x:PAnsiChar;
 s:String;
begin
  x := 'test';
  s := Copy(x,1,10);
  Self.Caption := s;
end;


上面的指针的使用是人为的,也是不必要的,除了我试图用这个例子来教。
第一个例子将在表单的标题中创建unicode中文字符,而不是显示文本“test”,因为2个字节已经变成了一个字符,因为我故意做了一些不好的事情来向你展示一种简单的方法来生成你所说的噪音,在我的代码中犯错误。
如果你在使用特定的unicode代码点时遇到麻烦,我建议你试试这个符号:

c := Char($21CC);  // this is U+21CC (cool two arrows thingy used in chemistry to indicate a reversible reaction)


或者你会看到这个,这几乎是一样的:

c := #$21CC; // U+21CC


注意,你不需要一个UTF8编码的文件来存储你用这种方式写的东西。

snz8szmq

snz8szmq2#

的评论
为什么Unicode Delphi 不以UTF-8保存?

Delphi 2010已保存的项目不是在UTF-8,我已经转换为UTF-8和所有已开始工作
似乎与 Delphi 项目(dpr和/或pas)源代码文件的编码有关。例如,如果将它们设置为ANSI,则不属于当前代码页的字符可能会被错误保存。
IDE(至少在 Delphi 2009中)创建新的单元,文件格式设置为ANSI。对于混合语言源代码,必须使用文本编辑器(文件格式)中的上下文菜单手动激活UTF-8(或UCS风格之一|UTF8)的情况。
IDE(在 Delphi 2009中)似乎也没有将默认文本格式设置为ANSI以外的格式的选项。
简短的回答:

将源代码的文件格式设置为UTF-8。

(The Delphi 2009 IDE默认不使用Unicode,我猜这在Delphi 2010中还是一样的)

twh00eeo

twh00eeo3#

如果你是从旧的 Delphi 版本中迁移项目的,请检查对话框中使用的字体。不是所有的字体都支持所有的unicode字符。
我遇到了一个问题,这显然是类似于你的:我有正确的unicode字符串在调试器中,但在应用程序中的一些特殊字符显示为黑色方块.这是从 Delphi 6迁移的旧程序,其中一些标题是通过代码设置.在新的形式一切正常(这里的标题是在对话框编辑器中设置,但这实际上是无关紧要的).
问题是所有迁移表单的字体。 Delphi 6曾经使用“MS Sans Serif”作为字体。但是这种字体丢失了大部分Unicode字符。切换到“Taxi”解决了我的问题。

相关问题