[WinStory #5] 再談?dòng)簿幋a:onghornLay —— 檢驗(yàn)硬編碼的另一有趣方式
上一期我談到了硬編碼對(duì)本地化的影響,這一期我們接著上文,再?gòu)钠渌矫嬲務(wù)動(dòng)簿幋a對(duì) Windows 的影響。
比如 Michael S.Kaplan 在其博客里所寫(xiě),記事本自從?Windows NT 3.1 引入“支持以不同編碼保存文件”的功能以來(lái),其默認(rèn)保存的編碼格式一直是 ANSI,即使在 1998-1999 年添加了 UTF-8 支持之后也是如此。這一默認(rèn)方式延續(xù)了近25年,直到 Windows 10 Build 1903 后默認(rèn)編碼才改成了 UTF-8.
一直以來(lái),不斷有客戶(hù)向微軟提出建議,希望在使用記事本保存文件時(shí)自動(dòng)使用 UTF-8,而不是默認(rèn)使用 ANSI。
而 Kaplan 的回答是:
這不可能。此默認(rèn)值已硬編碼到記事本中。
他們?cè)?1993 年將記事本的這一功能添加到 NT 3.1 時(shí)就做出了決定,并堅(jiān)持他們的做法——即使在 1998-1999 年添加了 UTF-8 支持之后也是如此。
這是硬編碼對(duì)文本編輯的影響。
之前我提到過(guò),偽本地化是檢驗(yàn)字符串是否被硬編碼的方式之一。而其實(shí),在 Windows 歷史上,微軟在 Longhorn 構(gòu)建中還曾采用過(guò)另一種方式來(lái)檢驗(yàn)版本字符串是否被硬編碼 —— 豬拉丁語(yǔ)(Pig Latin),這一方式在 Build 4029-4040 中采用。

為什么要檢驗(yàn)字符串是否被硬編碼?原因與當(dāng)年發(fā)布的 Windows Server 2003 有關(guān)。
Windows Server 2003 在開(kāi)發(fā)過(guò)程中名稱(chēng)更改過(guò)多次,如“Whistler Server(開(kāi)發(fā)代號(hào))”“Windows XP Server”“Windows?2002?Server(未正式采用)”“Windows .Net Server (2003)”,直到最后的“Windows Server 2003”

而每一次的名稱(chēng)更改都要耗費(fèi)微軟大量的時(shí)間和精力,因?yàn)榘姹咀址诤芏嗟胤蕉际怯簿幋a的。
為了讓 Longhorn 不重蹈 Server?2003 的覆轍,微軟在 Longhorn 中采用了豬拉丁語(yǔ)標(biāo)記版本字符串,這樣一來(lái),如果某個(gè)地方的名稱(chēng)沒(méi)有被更改,那么就說(shuō)明它被硬編碼了。
附豬拉丁語(yǔ)的規(guī)則:
對(duì)于以輔音開(kāi)頭的單詞,初始元音之前的所有字母都放在單詞序列的末尾,然后添加“ay”,如“Pig”→“igPay”
當(dāng)單詞以輔音群(形成一個(gè)聲音的多個(gè)輔音)開(kāi)頭時(shí),在說(shuō)話(huà)或?qū)懽鲿r(shí)將整個(gè)聲音添加到末尾。如:“Friend”→“iendsFray”
對(duì)于以元音開(kāi)頭的單詞,只需在末尾添加“hay”、“way”或“yay”(或僅添加“ay”)。如:"eat" = "eatway" 或 "eatay"
但是,根據(jù)這一規(guī)則,“Professional”應(yīng)該要被翻譯成“ofessionalPray”,但微軟內(nèi)部似乎并沒(méi)有人在意這一點(diǎn)(畢竟語(yǔ)法有錯(cuò)并不影響他們檢驗(yàn)硬編碼)