怎樣區分中文漢字和日文漢字

2021-04-13 12:41:40 字數 2202 閱讀 6840

隨著gb2312時代的沒落和中國官方強制推行的gb18030的消沉,所有人都覺得,無需置疑地unicode一統天下的時代即將,甚至已經來臨了。

我也曾經是,現在仍舊是unicode的推崇者。

推崇的理由很簡單——在gb2312,ascii的時代,乙個程式、乙個網頁當中多種語言(除了英語之外的)無法並存。gb2312編碼的文章,在big5下就是亂碼;反之亦然。一篇文章中同時含有中文和日文,或者中文和法文的事情,更是難以做到。在程式中,編碼的不一致就更可怕。你用乙個函式傳遞過去一句問候,可是對方卻用了錯誤的編碼來解析你這句問候,結果就是一堆亂碼。這給開發帶來了很大的不便。

那麼,unicode,在我眼裡理所應當要解決這些問題的。在unicode裡面,所有語言的編碼互不衝突,因此在同一篇文章裡可以同時顯示所有語言——於是,我也毫不猶豫地在windows程式設計中放棄了a結尾的api,全部使用w結尾的api;在網頁上編碼全都設定為utf-8……

可是,事情真的是那樣嗎?直到最近,我才明白我想的太天真了。

仔細看看上面的兩個「直」字,就會發現它們的不同——左邊是中文中的直,右邊則是日文中的直。類似的漢字還有「才」「具」「畫」「角」「骨」等等。

在unicode制定過程中,像上面這樣不同國家的同乙個漢字(寫法上稍有區別)是否應當編碼為同乙個字時, 引起了很大的爭議。爭議的最終結果,是上面兩個字被賦予同乙個編碼。就這樣,中文、日文、韓文中的所有漢字都被蒐集整理到一起,填充到unicode編碼的0×4e00到0×9fff的龐大block當中。這些字按照字形排列,不再區分哪個是中文字元,那個是日文字元,哪個是韓文本元,統一叫做「cjk unified ideographs」。

這樣做的問題就是,乙個字元本身不具有了語言的屬性,它到底是中文還是日文,取決於顯示它的字型。例如上面的「直」字,如果我們用中文字型(例如simsun, simhei)顯示它,就會得到圖中左邊的字,如果用日文字型顯示它(如ms gothic),就會得到右邊日文的直。

這樣做會導致什麼問題呢?

1,無法利用文字的編碼來區分其屬於哪種語言的文字。

unicode當中的其他語言——例如阿拉伯語,都有其固定的編碼範圍,例如阿拉伯語是0×0600到0×06ff。這樣乙個字元處理軟體在處理到乙個0×0600到0×06ff區間的字元時,它就知道現在在處理的是阿拉伯文。可是漢字呢?中日韓的漢字被無規律地混雜在同乙個區間中,是哪國文字以無法辨認。

2,一種字型無法同時表示中文、日文和韓文

由於文字是利用字型顯示來表明它自己是哪國文字的,那麼一種字型將無法同時表示中文和日文。試想,你在創造一種字型;當你遇到「直」這個漢字時,你要麼選擇中文寫法,要麼選擇日文寫法,兩者不可兼得。

這會帶來什麼後果呢?輕一點的後果,是中日文混用寫成的文章中必須設定至少2種字型才能準確表達,因而在一些不支援混用字型的編輯器——例如windows的記事本當中要麼中文字元變成了日語,要麼日語字元變成了中文。在日文windows下瀏覽utf-8中文網頁的朋友,也發現那些中文字元都變成日文字元了吧(比如「骨」裡面的橫折跑到了右面)?試想這樣「錯字」連篇的中文能用在正式場合嗎?

嚴重一些的後果是什麼呢? 嚴重的後果就是,目前很多軟體,尤其是西方歐美的字處理軟體都在試圖用同一種字型滿足所有語言的需要。例如「arial unicode ms」字型,就是一種非常常用的unicode字型。很顯然,在事實上這樣的字型在規定「直」字之類漢字的字模時也必須選擇中文寫法還是日文寫法。

結果不過說也知道——也許是日本在it界的影響力高於中國,也許是什麼原因,似乎arial unicode ms之類的字型中凡是中日寫法不同的字型,全都是日文寫法。

換句話說,乙個使用arial unicode ms的老外,即便他在用中文寫一篇文章,即便他用的輸入法是中文拼音,最後打出來的字元卻全都是日文漢字。 他如果是個在學習中文的人,他學到的將是這些日文漢字。更甚之,如果將來這些所謂的「標準unicode字型」一統天下,宋體、黑體沒落的時候,中國人的電腦中的中國漢字也會不知不覺地被日本漢字取代,用電腦學習的小孩子們也會把電腦上出現的日本漢字當作漢字的正確寫法。

許多人也許會想:一定要和日本競爭,爭取讓標準的unicode字型裡的漢字使用中文漢字——現在不是爭不爭的問題,問題是,既然中文日文中的「直」不是完全相同的漢字,為什麼不在制定其編碼階段就把它們分開呢?

我不知道unicode是否制定了完全把中日韓三種語言孤立開的版本;我只知道目前最流行的unicode是像上面這樣的。 使用unicode的諸位,請務必提高警惕。

補充:並不是所有中日文裡類似的漢字都像「直」字一樣被編為同乙個編碼,例如「步」和「歩」就被分別編碼了。但是這樣的結果是,有的漢字被編為同乙個編碼,有的卻沒有,更加混亂了。 

望文生義的日文漢字

愛人 朝飯前 簡單 暗算 心算 石頭 死腦筋的人 一味 同類 浮気 見異思遷 得體 來歷 身份 演出 監製 遠慮 客氣 大方 大眾 大手 大型廠商 企業 大家 房東 女將 老闆娘 十八番 最得意拿手的 改行 作文時換行 外人 外國人 階段 樓梯 買手 買方 快報 好訊息 恰好 穿著 家內 老婆 還暦...

ubuntu 怎樣輸入漢字

1。安裝中文語言 system adminstration language support,安裝 中文簡體 chinese simplified 2。安裝scim system adminstration synaptic package manager,搜尋scim,安裝scim,scim ta...

OpenCV顯示中文漢字

採用windows的gdi顯示系統的truetype字型,沒有封裝,就兩個函式,分成了h和cpp檔案,可以自己編輯檔名和函式名,亦可以直接將cpp的 複製到你需要的程式中。後面的cpp檔案有一些簡要說明。ifndef puttext h define puttext h include includ...