Integration by me

你們必曉得真理,真理必叫你們得以自由。

標籤:Unicode

在 nginx 上調整所有文本的編碼

全站的文字檔都使用相同編碼是很常見的。尤其是 UTF-8 儼然是今日的實作標準。然而,nginx 預設的 charset_types 設定不包括 text/css,遑論其他非純文本。(例如 text/markdown

預設的 charset_types 應該要是 text/* 才對,因為為了向後相容,許多 text/* 格式預設解讀為 ASCII (us-ascii)。就連 text/xml 也是如此,即使檔案中有 BOMXML 宣告也徒勞無功。所以,現在我們應該用 application/xml 來傳遞 XML。

然而 charset_types 設定只檢查完全符合的 MIME,不然就必須用 * 匹配所有類型。幸好 nginx 有可以匹配正則表達式的 map,而且 charset_types 也接受變數。

map $sent_http_content_type $charset {
    ~^text/   utf-8;
}

charset       $charset;
charset_types *;

這樣的設定會讓 nginx 指定所有文本為 UTF-8,例如 text/css; charset=utf-8

如何用嘸蝦米打出〇

嘸蝦米從〇到十都是一碼字。取 O 就可以打出了。

事情不是憨人想的這麼簡單。

實際在 Unicode 查碼網站查詢用嘸蝦米打出來的其實是空心圓圈 (U+25CB WHITE CIRCLE) 而不是漢字(U+3007 IDEOGRAPHIC NUMBER ZERO)

為什麼會用錯誤的代替漢字呢?這也不是嘸蝦米願意的。過去台灣使用的中文編碼是 Big5,當初 1970 年的溪頭會議就堅決把當成符號而不是字,因此也就只收錄符號。在嘸蝦米輸入法設計的時候,Unicode 尚未興盛,當然就是收錄 Big5 中的了。

直到 Unicode 興盛以後,嘸蝦米也從善如流把加入字根。然而為了向後相容,要打出〇必須選字。不過多數使用者,包括過去的我,仍然一直傻傻地把 ○ 當成中文的〇……。

把 ○ 當成〇有什麼影響

對機器來說 ○ 就只是個符號。這對於電腦翻譯是一大阻礙,更會干擾視障人士的輔助設備。視障輔助軟體把二○一七唸成二, white circle, 一七甚至二、十七都有可能,留下滿頭問號的使用者。

此外,對明眼人來說,把 ○ 當成〇也很醜。因為 ○ 是符號,所以字型的設計上會與漢字脫鉤,和漢字擺在一起就很不協調。而且文字加粗時,符號應該保持原狀。粗體的 、斜體的 看起來仍是 ♠。

錯誤版正確版
二○一七二〇一七
二○一七二〇一七
二○一七二〇一七
二○一七二〇一七
二○一七二〇一七
二○一七二〇一七

〇字的身世

則天文字中的。南宋算草中亦以圓圈符號代表 0,於是後來〇才假借為 0。雖然〇也可以算是符號,但是使用上與一、二、三等漢字無異,字型設計上應視為漢字。而且與表示正確、圈選的的意義迥異,應該視為不同的字元。