2012-09-06 46 views
4

我想我开始明白Unicode的,但是这个我百思不得其解:为什么某些字符常量宽1字节,其他2字节宽?

const 
c1 = #1; --> SizeOf() = 2 
c2 = #33; --> SizeOf() = 2 
c3 = #127; --> SizeOf() = 2 
c4 = #128; --> SizeOf() = 1 
c5 = #160; --> SizeOf() = 1 
c6 = #161; --> SizeOf() = 1 
c7 = #255; --> SizeOf() = 1 

谁能解释? 德尔福XE2,默认的Windows 1252代码页

感谢 月

+0

说明还http://qc.embarcadero.com/wc/qcmain.aspx?d= 100685 gotcha –

+0

@ Arioch'The - 我不知道如何解决这个'错误',因为这真的是在Delphi中如何实现Unicode的; Ord(Ch)通常取决于默认的ANSI代码页;在具有不同ANSI代码页的系统上编译时,可以获得不同的二进制文件。 – kludg

+0

@Serg 默认哪个?在同一个项目中,我们可以在至少三个不同的代码页中编码源... ---- 就我个人而言,我认为Ord(WideChat)应尽可能映射到UTF-16字。 Ord(AnsiChar)应映射到GetACP()字节,如果可能的话。 分别有Chr(Byte):AnsiChar和Chr(Word):WideChar; 如何处理MBCS和Unicode代理我不知道,但希望它是罕见的野兽。 –

回答

8

有书面文件 - 见$HIGHCHARUNICODE指令

+0

@DavidHeffernan我认为这是为了使用Unicode之前的代码,使#160与D2007和更早版本中的字符相同。 – hvd

+0

@DavidHeffernan重读后,我认为你是对的,谢谢你的澄清。 – hvd

+1

@DavidHeffernan - 功能奇怪但一致。可能有兼容性的原因,这同样导致'AnsiUpperCase'成为Delphi 2009中的一个unicode函数。 – kludg

相关问题