• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Unicode
 

Unicode

on

  • 410 views

介紹 Unicode

介紹 Unicode

Statistics

Views

Total Views
410
Views on SlideShare
410
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Unicode Unicode Presentation Transcript

    • Unicode Internationalization(i18n) and Localization(l10n)
    • • Before Unicode • Unicode • 程式設計
    • • Before Unicode • Unicode • 程式設計
    • Before Unicode • • • • • ASCII Big5 GB Windows 1252 …
    • Before Unicode ASCII共定義了128個字元,其中33個字元無 法顯示(這是以現今作業系統為依歸,但在 DOS模式下可顯示出一些諸如笑臉、撲克 牌花式等8-bit符號),且這33個字元多數都 已是陳廢的控制字元,控制字元的用途主 要是用來操控已經處理過的文字,在33個 字元之外的是95個可顯示的字元,包含用 鍵盤敲下空白鍵所產生的空白字元也算1個 可顯示字元(顯示為空白)。
    • Before Unicode BIG5 碼系統為兩位元組之內碼系統,共可定義 19782 個字碼,其高、低位元組的範圍如下: • 高位元組 0x81~0xFE • 低位元組 0x40~0x7E、0xA1-0xFE 其第一位元組的值在 16 進制的 A1~FE 之間, 第 二位元組在 40~7E 和 A1~FE 之間。因此,其 第一位元組的最高位元是 1, 第二位元組的最高 位元可能是 1,也可能是 0。Big5 在上述範圍 內,規劃出標準字(STDFONT)、特殊符號 (SPCFONT、SPCFSUPP)及使用者造字 (USRFONT)的區域。
    • Before Unicode BIG5 的 Unicode 補完計畫 • Unicode補完計畫只是補字,並沒有解決亂 碼、字碼不足的問題。 • 字碼並不完全與 Unicode 相同,因此,在 使用了補完計畫裡的某個字以後,在其他 人電腦上不一定能看到,必須對方也安裝 補完計畫才行。
    • Before Unicode GB(GB2312/GBK) • GB2312是GBK的一個子集,GB2312編碼範圍是 0xA1A1 - 0xFEFE ,如果是純粹的 GB2312編 碼,處理起來很簡單。GBK 採用雙字節表示,編 碼範圍為 8140-FEFE,首字節在 81-FE 之間, 尾字節在 40-FE 之間,剔除 xx7F 一條線。總計 23940 個碼位,共收入 21886 個漢字和圖形符 號,其中漢字(包括部首和構件)21003 個,圖 形符號 883 個。
    • Before Unicode 問題 • 對拉丁語系來說,字碼足夠,但是在跨國 對拉丁語系來說,字碼足夠, 使用時,會遇到內碼重複。 使用時,會遇到內碼重複。 • 對東亞來說,字碼不足,無法表達所有 對東亞來說,字碼不足, 以中文來說, 萬字。 字,以中文來說,就超過 2 萬字。 • 程式處理不易。 程式處理不易。
    • Unicode Why Unicode? 隨著電腦功能的日趨強大與價格的日趨便宜,其應用領域也越來越廣。 但是隨之而來的各種編碼需求,卻使得單一位元組的編碼方式,因編 碼空間太小,變得不足以因應各種應用程式的需求。中文字、排版系 統的標誌符號、非英語拼音字母和圖形符號等的編碼,需要使用2或 多個位元組來編碼。同時,為了預防這些多位元組字元 碼被電腦或網 路設備「吃掉」其中的某個位元組,編碼時必須避開每個位元組的0 ~32和127這34個控制碼。這種做法嚴重浪費編碼空間,就多位元組 擴充編碼的國際標準ISO2022而言,兩個8位元的位元組只能提供最 多188個控制字元和35,344個文字形符號的編碼空間, 共計35,532個 編碼位置,但是16個位元的編碼空間事實上高達65,536。兩者相比 較,ISO2022的16位元編碼只能達到最大編碼空間的54%,顯得利用 率很差。同時在應用層次的編碼,由於廠商眾多又缺乏共識,往往你 編你的碼、我編我的碼,其後果則是引發萬碼奔騰的亂象。
    • Unicode 源由 1988年初,美國Xerox公司的Joe Becker倡議以新的編碼結構,另外編 訂世界性字元編碼標準:將電腦字元集編碼的基本 單位由現行的7或 8個位元一舉擴充為16個位元,並且充分利用65,536 個編碼位置以容 納全世界各種語言的字元和常用符號。新的字元集 編碼標準被命名為 “Unicode”。一群來自Xerox公司和Apple 公司的工程師組成工作小 組,負責Unicode的原始設計工作。1991年 元月,十多家電腦硬軟 體、網路和資訊服務業者,包括:IBM、DEC、 Sun、Xerox、 Apple、Microsoft、Novell名公司,共同出資成立 Unicode協會(The Unicode Consortium),並由協會設立非營利的 Unicode公司。 Unicode協會成立之後,將原先的工作小組擴編為 Unicode技術委員 會(Unicode Technical Committee),專責Unicode 的字元搜集、整 理、編碼等工作。推動Unicode成為國際標準的工作, 則由Unicode 公司負責。目前最新版本為第五版。
    • • Before Unicode • Unicode • 程式設計
    • Unicode 種類: • UCS-4 • UCS-2 • UTF-8 • UTF-16 • UTF-32
    • Unicode UCS-4
    • Unicode UCS-2 0000h 字面稱為基本多語文字面(Basic Multilingual Plane, BMP).當電腦系統只使用 BMP 字元碼的時候,可以省略 G-octect 與 P-octect, 所以就變成 16 bit,稱為 ISO10646字元碼的基本面形式(即 UCS-2 ).
    • Unicode UTF-8 範圍:0x000000~0x1fffff 不定長度,轉換以後可能是 8 bit, 也可能是 16 bit 或 24 bit 或 32 bit。主要將原本是 32 bit 的 ucs-4 拆成 4 個 byte,以利於傳輸。
    • Unicode
    • Unicode UTF-16 範圍:0x00000~0xfffff 規則:未超過 0x10000,以一個整數(2 bytes) 表示;大部分的字都被包含在一個整數(2 bytes)裡,等同是 UCS-2 。超過,則減去 0x10000,得到 20 bits整數,然後拆為兩 個 10 bits(假設為w1、w2),接著 110110+w2,110111+w1,得到兩個整 數。
    • Unicode UTF-16
    • Unicode UTF-32 主要用來節省空間用,基本上是 UCS-4的子 集合。
    • • • • Before Unicode Unicode 程式設計
    • 程式設計 內碼轉換 • 自製對照表 • Windows API ( MultiByteToWideChar、 WideCharToMultiByte ) • libiconv (http://www.gnu.org/software/libiconv/)
    • 程式設計 字元、字串的表示 • ASCII: char s[]=“Hello world!”;char c=‘c’; • Unicode: wchar_t s[]=L”Hello world!”; wchar_t c=L’c’; • Windows: TCHAR s[]=TEXT(“Hello world!”); TCHAR c=_T(‘c’);// 或使用 _T() 替代 TEXT()
    • 程式設計 字串處理 • ASCII (char):strcpy(), strcat(), strcmp()… • Unicode (wchar):wcscpy(), wcscat(), wcscmp()… • Windows:可使用 TCHAR 並定義 _MBCS或_UNICODE表明使用 double byte 或 unicode,然後調用 _tcscpy(), _tcscat(), _tcscmp() ….
    • 程式設計 輸入、輸出 • ASCII:printf(), scanf(), fwprintf()… • Unicode: wprintf(), wscanf(), fwscanf()… • Windows: _tfprintf(), _tscanf(), _tfprintf()… 使用前,同樣也要 #define _UNICODE、 #define UNICODE
    • 程式設計 資料庫 • MS SQL: nvarchar, nchar • MySQL: 建立 Database、Table 與連線時 就需要指定使用編碼 • SQLLite: Unicode base
    • 程式設計 其他OS的處理方式 • 型別大同小異,只要能容納字碼大小即 可。如 nVidia SDK 的 dbl_chr。typedef unsigned short dbl_chr; • 字串的處理也多半會提供適當的字串處理 函式。如 nVidia SDK 的 d_strcpy(), d_strcat(), d_strcmp()…
    • 程式設計 • 編碼自動偵測 – 文字檔 (BOM): UTF-16(LE) FF FE、UTF-8 EF BB BF… – html/xml • 可能做到嗎?你已經在使用了,大多的Browser 都提供了此功能。 • Mozilla 有開源此函式庫:Mozilla Charset Detectors http://www.mozilla.org/projects/intl/chardet.html • enca (http://trific.ath.cx/)
    • 程式設計 Localization • locale.h,提供設置本地化語系的相關函式,如 setlocale()、newlocale()、freelocale() … • 對照表,通常以英文當作原始字串,再依照 Locale 設定來傳回對照的字串 • Windows,原理一樣,但多半將字串放在資源檔 裡。 • Linux,使用 gettext 函式庫,並有工具可自動收 集需要作本地化的字串,或作翻譯。
    • 程式設計 字型顯示 • 泰文與希伯來文 • 動態組字 (http://zh.wikipedia.org/wiki/%E5%8B%95 %E6%85%8B%E7%B5%84%E5%AD%97)
    • 程式設計 輸入法
    • 參考資料 • • • • • • • • • • ASCII - Wikipedia http://zh.wikipedia.org/wiki/ascii 由方方土探討Big5e http://netlab.cse.yzu.edu.tw/~statue/freebsd/hanzi/examp/ 关于GB编码的一些常识 - 字符编码 http://blog.chinaunix.net/u2/66172/showart_557975.html Unicode補完計畫 – Wikipedia http://zh.wikipedia.org/wiki/Unicode%E8%A3%9C%E5%AE%8C%E8%A8%88%E7% 95%AB Unicode與ISO10646(上)(作者:曾士熊) http://www.ascc.sinica.edu.tw/nl/89/1610/02.txt Unicode與ISO10646(下)(作者:曾士熊) http://www.ascc.sinica.edu.tw/nl/89/1611/02.txt UTF-16 - Wikipedia http://zh.wikipedia.org/wiki/UTF-16 RFC 2781 - UTF-16, an encoding of ISO 10646 http://tools.ietf.org/html/rfc2781 谈谈Windows程序中的字符编码(1) >>> 致力于编码技术发展 http://www.utf.com.cn/article/s13 ruby character encoding detection http://blogger.godfat.org/2008/06/rubycharacter-encoding-detection.html
    • 參考資料 • • • • 親手打造 GNU/Linux 中文環境 (五) - 訊息國際化的解決方案 (gettext 簡介) http://cle.linux.org.tw/xcin/i18n/pc2000/p5/index.html Byte-order mark http://en.wikipedia.org/wiki/Byte_Order_Mark#Representations_of_byte_order_marks _by_encoding ANSI C X3.159-89 標準 http://phi.sinica.edu.tw/aspac/reports/95/95002/appendixa.html setlocale, _wsetlocale (CRT) http://msdn.microsoft.com/enus/library/x99tb11d(VS.80).aspx