Your SlideShare is downloading. ×
0
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Unicode
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Unicode

492

Published on

介紹 Unicode

介紹 Unicode

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
492
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Unicode Internationalization(i18n) and Localization(l10n)
  • 2. • Before Unicode • Unicode • 程式設計
  • 3. • Before Unicode • Unicode • 程式設計
  • 4. Before Unicode • • • • • ASCII Big5 GB Windows 1252 …
  • 5. Before Unicode ASCII共定義了128個字元,其中33個字元無 法顯示(這是以現今作業系統為依歸,但在 DOS模式下可顯示出一些諸如笑臉、撲克 牌花式等8-bit符號),且這33個字元多數都 已是陳廢的控制字元,控制字元的用途主 要是用來操控已經處理過的文字,在33個 字元之外的是95個可顯示的字元,包含用 鍵盤敲下空白鍵所產生的空白字元也算1個 可顯示字元(顯示為空白)。
  • 6. 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)的區域。
  • 7. Before Unicode BIG5 的 Unicode 補完計畫 • Unicode補完計畫只是補字,並沒有解決亂 碼、字碼不足的問題。 • 字碼並不完全與 Unicode 相同,因此,在 使用了補完計畫裡的某個字以後,在其他 人電腦上不一定能看到,必須對方也安裝 補完計畫才行。
  • 8. Before Unicode GB(GB2312/GBK) • GB2312是GBK的一個子集,GB2312編碼範圍是 0xA1A1 - 0xFEFE ,如果是純粹的 GB2312編 碼,處理起來很簡單。GBK 採用雙字節表示,編 碼範圍為 8140-FEFE,首字節在 81-FE 之間, 尾字節在 40-FE 之間,剔除 xx7F 一條線。總計 23940 個碼位,共收入 21886 個漢字和圖形符 號,其中漢字(包括部首和構件)21003 個,圖 形符號 883 個。
  • 9. Before Unicode 問題 • 對拉丁語系來說,字碼足夠,但是在跨國 對拉丁語系來說,字碼足夠, 使用時,會遇到內碼重複。 使用時,會遇到內碼重複。 • 對東亞來說,字碼不足,無法表達所有 對東亞來說,字碼不足, 以中文來說, 萬字。 字,以中文來說,就超過 2 萬字。 • 程式處理不易。 程式處理不易。
  • 10. Unicode Why Unicode? 隨著電腦功能的日趨強大與價格的日趨便宜,其應用領域也越來越廣。 但是隨之而來的各種編碼需求,卻使得單一位元組的編碼方式,因編 碼空間太小,變得不足以因應各種應用程式的需求。中文字、排版系 統的標誌符號、非英語拼音字母和圖形符號等的編碼,需要使用2或 多個位元組來編碼。同時,為了預防這些多位元組字元 碼被電腦或網 路設備「吃掉」其中的某個位元組,編碼時必須避開每個位元組的0 ~32和127這34個控制碼。這種做法嚴重浪費編碼空間,就多位元組 擴充編碼的國際標準ISO2022而言,兩個8位元的位元組只能提供最 多188個控制字元和35,344個文字形符號的編碼空間, 共計35,532個 編碼位置,但是16個位元的編碼空間事實上高達65,536。兩者相比 較,ISO2022的16位元編碼只能達到最大編碼空間的54%,顯得利用 率很差。同時在應用層次的編碼,由於廠商眾多又缺乏共識,往往你 編你的碼、我編我的碼,其後果則是引發萬碼奔騰的亂象。
  • 11. 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 公司負責。目前最新版本為第五版。
  • 12. • Before Unicode • Unicode • 程式設計
  • 13. Unicode 種類: • UCS-4 • UCS-2 • UTF-8 • UTF-16 • UTF-32
  • 14. Unicode UCS-4
  • 15. Unicode UCS-2 0000h 字面稱為基本多語文字面(Basic Multilingual Plane, BMP).當電腦系統只使用 BMP 字元碼的時候,可以省略 G-octect 與 P-octect, 所以就變成 16 bit,稱為 ISO10646字元碼的基本面形式(即 UCS-2 ).
  • 16. Unicode UTF-8 範圍:0x000000~0x1fffff 不定長度,轉換以後可能是 8 bit, 也可能是 16 bit 或 24 bit 或 32 bit。主要將原本是 32 bit 的 ucs-4 拆成 4 個 byte,以利於傳輸。
  • 17. Unicode
  • 18. Unicode UTF-16 範圍:0x00000~0xfffff 規則:未超過 0x10000,以一個整數(2 bytes) 表示;大部分的字都被包含在一個整數(2 bytes)裡,等同是 UCS-2 。超過,則減去 0x10000,得到 20 bits整數,然後拆為兩 個 10 bits(假設為w1、w2),接著 110110+w2,110111+w1,得到兩個整 數。
  • 19. Unicode UTF-16
  • 20. Unicode UTF-32 主要用來節省空間用,基本上是 UCS-4的子 集合。
  • 21. • • • Before Unicode Unicode 程式設計
  • 22. 程式設計 內碼轉換 • 自製對照表 • Windows API ( MultiByteToWideChar、 WideCharToMultiByte ) • libiconv (http://www.gnu.org/software/libiconv/)
  • 23. 程式設計 字元、字串的表示 • 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()
  • 24. 程式設計 字串處理 • ASCII (char):strcpy(), strcat(), strcmp()… • Unicode (wchar):wcscpy(), wcscat(), wcscmp()… • Windows:可使用 TCHAR 並定義 _MBCS或_UNICODE表明使用 double byte 或 unicode,然後調用 _tcscpy(), _tcscat(), _tcscmp() ….
  • 25. 程式設計 輸入、輸出 • ASCII:printf(), scanf(), fwprintf()… • Unicode: wprintf(), wscanf(), fwscanf()… • Windows: _tfprintf(), _tscanf(), _tfprintf()… 使用前,同樣也要 #define _UNICODE、 #define UNICODE
  • 26. 程式設計 資料庫 • MS SQL: nvarchar, nchar • MySQL: 建立 Database、Table 與連線時 就需要指定使用編碼 • SQLLite: Unicode base
  • 27. 程式設計 其他OS的處理方式 • 型別大同小異,只要能容納字碼大小即 可。如 nVidia SDK 的 dbl_chr。typedef unsigned short dbl_chr; • 字串的處理也多半會提供適當的字串處理 函式。如 nVidia SDK 的 d_strcpy(), d_strcat(), d_strcmp()…
  • 28. 程式設計 • 編碼自動偵測 – 文字檔 (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/)
  • 29. 程式設計 Localization • locale.h,提供設置本地化語系的相關函式,如 setlocale()、newlocale()、freelocale() … • 對照表,通常以英文當作原始字串,再依照 Locale 設定來傳回對照的字串 • Windows,原理一樣,但多半將字串放在資源檔 裡。 • Linux,使用 gettext 函式庫,並有工具可自動收 集需要作本地化的字串,或作翻譯。
  • 30. 程式設計 字型顯示 • 泰文與希伯來文 • 動態組字 (http://zh.wikipedia.org/wiki/%E5%8B%95 %E6%85%8B%E7%B5%84%E5%AD%97)
  • 31. 程式設計 輸入法
  • 32. 參考資料 • • • • • • • • • • 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
  • 33. 參考資料 • • • • 親手打造 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

×