Sunday, October 31, 2010

研究一下Unicode




給有志研究電腦技術者

今天講Unicode。

Unicode 有譯做萬國碼。我第一次認識Unicode,剛巧碰上網頁亂碼。用正﹙繁﹚體中文,做網頁,寫HTML,文字亂碼,頓成一埋垃圾,一文不值。又嘗過用text﹙.txt﹚格式儲存中文,打了數行,存檔一save,即造垃圾。Unicode可算解決亂碼之辦法。正體、簡體中文,皆適用Unicode。

身為讀者,用web browser瀏覽網頁,讀電郵,按web browser的view,再按character encoding,就會看到一系列編碼。那,哪個才用得上?正體中文可能是big5﹙大五碼﹚,簡體中文可能用gb2312﹙國標碼﹚。日文可能用Shift_JIS之編碼。選擇帶來麻煩,浪費時間。除了作者,讀者不會事先估計作者用了編碼甲,還是編碼乙。用Unicode就夠了,正體、簡體中文、日文,都能顯示。一般人一般使用,不做學術研究,Unicode非常有用。Unicode節省時間,令人不用估計文字所用編碼是甚麼。

CJK Unified Ideographs : To Infinity and Beyond一文,都講得幾富技術細節。CJK Unified Ideographs 合共二〇九三二字。由Unicode編號4E00至9FFF﹙十六進制Hexadecimal﹚皆是。

CJK Unified Ideographs統一字符,統一中國、日本、韓國的字符,官方說明,三地歷史源流相通,故中文歸類CJK Unified Ideographs。

寫電腦程式,尤其記得用Unicode,那就省卻轉碼之時間。

程式原始檔,用UTF-8﹙Unicode一個常用分支﹚儲存。標明用UTF-8編寫。

與資料庫取得或在資料庫寫入數據,皆標明用UTF-8。PHP和MySQL皆然。

建立資料庫,default預設用UTF-8。建立table表default預設用UTF-8。MySQL資料庫語言例如要用:CREATE DATABASE sample DEFAULT CHARACTER SET utf8。並用CREATE TABLE sampleTable (id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY (id)) CHARACTER SET utf8 COLLATE utf8_general_ci。

和資料庫聯繫,記謹用SET NAMES utf8先於其它指令﹙query﹚。PHP頁面頂部註明mb_internal_encoding('UTF-8')。


PHP實例:
____________________
<?php

@ $db = new mysqli('serverIPAddressOrDomainName.com', 'UserName', 'Password', 'DataBaseName');
if (mysqli_connect_errno()){
echo "

Could not connect to database. Try again later, please.

";
echo "

數據庫失去聯絡。請之後再試一次。

";

} else {

$setUpConnection = 'yes';
}


if ($setUpConnection == 'yes'){
/************* >>>>>>>> UTF-8 connection below *********/
$query = "SET NAMES utf8";
$resultsUTF8Connection = $db->query($query);

if ($resultsUTF8Connection){
// success: do nothing
}else{
echo 'Error 錯誤';
exit;
}
/************* >>>>>>>> UTF-8 connection above *********/
} // if ($setUpConnection == 'yes'){

?>
____________________




HTML頁面head部分用<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>,確保讀者可享受web browser自動選UTF-8之便利。Web browser有機會用ISO-8859-1歐洲文字做預設編碼,令頁內文字亂碼。

HTML實例:
____________________
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

<!-- *********Must use UTF-8 as charset because of the use of traditional / simplified Chinese characters*********-->

<title>Title 標題</title>

</head>

<body>


</body>

</html>
____________________



Office applications,OpenDocument format用UTF-8儲存text檔,用zip壓縮大小,成了.odt、.odp、.ods等檔案。UTF-8造福人群。

XML檔是文字檔,也用UTF-8儲存。OpenDocument所zip之內容是XML檔。




Unicode

參考:
CJK Unified Ideographs : To Infinity and Beyond
http://babelstone.blogspot.com/2007/07/cjk-unified-ideographs-to-infinity-and.html

Unicode例子:
http://www.code2000.net/UNI32001.HTM

PHP
http://www.ibm.com/developerworks/library/os-php-unicode/index.html

Hexidecimal
http://en.wikipedia.org/wiki/Hexadecimal

Uncode中日韓文字同源
http://www.unicode.org/notes/tn26/

No comments: