2012-09-06 80 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

相關問題