查看完整版本: [-- BIG5 Extension 計畫(3) 簡體中文 c_936.nls 解析 --]

汉化新世纪论坛 -> 技术精华 -> BIG5 Extension 計畫(3) 簡體中文 c_936.nls 解析 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

kiiali 2003-02-13 16:14

BIG5 Extension 計畫(3) 簡體中文 c_936.nls 解析

BIG5 Extension 計畫(3) 簡體中文 c_936.nls 解析
by Kii Ali
這些東西是寫給簡體的朋友看的。
不過所謂的繁體/簡體,因為在本文裡面一再重疊,與作業系統的語
言關係不再那樣絕對,在這裡會有一些混淆。或許我該說,是寫給
使用 chs 語言作業系統的朋友們看。
也請參考 c_950.nls 的說明。因為同樣的東西,這兒將不再提出。
坦白說,GB2312/GBK 的編碼,是還有一點缺點。但這些缺點比起
BIG5 的致命傷,其實已經好很多。基本上,GBK extension 幾乎
涵蓋了所有 BIG5 編碼當中的字。
所以當「軟體動物」製作 MDaemon 雙語,只使用繁體,但在簡體
中文一樣能正確顯示,這就是原因。

■廢話
當我們以 ultraedit 10 打開 c_936.nls ,會看到如下的天書一般內容。
這是 c_950.nls 的前 8 bytes
00000000h: 0D 00 B6 03 02 00 3F 00 3F 00 3F 00 3F 00 81 FE ; ..?..?.?.?.?
這是 c_936.nls 的前 8 bytes 與之後,只有第一行不一樣,其他都一樣。
00000000h: 0D 00 A8 03 02 00 3F 00 3F 00 3F 00 3F 00 81 FE ; ..?..?.?.?.?.
00000010h: 00 00 00 00 00 00 00 00 00 00 03 80 00 00 01 00 ; ...........?....
00000020h: 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 ; ................
00000030h: 0A 00 0B 00 0C 00 0D 00 0E 00 0F 00 10 00 11 00 ; ................
00000040h: 12 00 13 00 14 00 15 00 16 00 17 00 18 00 19 00 ; ................
00000050h: 1A 00 1B 00 1C 00 1D 00 1E 00 1F 00 20 00 21 00 ; ............ .!.
00000060h: 22 00 23 00 24 00 25 00 26 00 27 00 28 00 29 00 ; ".#.$.%.&.'.(.).
00000070h: 2A 00 2B 00 2C 00 2D 00 2E 00 2F 00 30 00 31 00 ; *.+.,.-.../.0.1.
00000080h: 32 00 33 00 34 00 35 00 36 00 37 00 38 00 39 00 ; 2.3.4.5.6.7.8.9.
00000090h: 3A 00 3B 00 3C 00 3D 00 3E 00 3F 00 40 00 41 00 ; :.;.<.=.>.?.@.A.
000000a0h: 42 00 43 00 44 00 45 00 46 00 47 00 48 00 49 00 ; B.C.D.E.F.G.H.I.
000000b0h: 4A 00 4B 00 4C 00 4D 00 4E 00 4F 00 50 00 51 00 ; J.K.L.M.N.O.P.Q.
000000c0h: 52 00 53 00 54 00 55 00 56 00 57 00 58 00 59 00 ; R.S.T.U.V.W.X.Y.
000000d0h: 5A 00 5B 00 5C 00 5D 00 5E 00 5F 00 60 00 61 00 ; Z.[..].^._.`.a.
整個 NLS 可仿照 BIG5 ,切為四段 (因為 GB2312 從 A1A1- FEFF,
是很完整的一塊,不像 BIG5 被分割掉。)
00000000h:
  |       ANSI 編碼的範圍 (猜測)
00000410h:
00000420h:
  |       對應到 8000-A0FF
00004410h:
00004420h:
  |       對應到 A100-FEFE
00010010h:
00010010h:
  |       是 unicode Little Indian 的段落嗎? (猜測)
00030020h:

■標準 GB2312 段落尋找
(如果看得頭痛,請把此段跳過去,這是我當初硬找出來的過程)。
我們可以先去找這段。你仔細看看,是不是跟 GB2312 的 unicode
段落很像?

00004560h: 25 E5 00 30 01 30 02 30 B7 00 C9 02 C7 02 A8 00 ;
00004570h: 03 30 05 30 14 20 5E FF 16 20 26 20 18 20 19 20 ;
00004580h: 1C 20 1D 20 14 30 15 30 08 30 09 30 0A 30 0B 30 ;
00004590h: 0C 30 0D 30 0E 30 0F 30 16 30 17 30 10 30 11 30 ;
000045a0h: B1 00 D7 00 F7 00 36 22 27 22 28 22 11 22 0F 22 ;
000045b0h: 2A 22 29 22 08 22 37 22 1A 22 A5 22 25 22 20 22 ;
再重新編排一下。這樣應該比較容易看。
00004560h: 25E5   0030   0130   0230   B700   C902   C702   A800   ;
00004570h: 0330   0530   1420   5EFF   1620   2620   1820   1920   ;
00004580h: 1C20   1D20   1430   1530   0830   0930   0A30   0B30   ;
00004590h: 0C30   0D30   0E30   0F30   1630   1730   1030   1130   ;
000045a0h: B100   D700   F700   3622   2722   2822   1122   0F22   ;
000045b0h: 2A22   2922   0822   3722   1A22   A522   2522   2022   ;
然後把這一段的編碼,全部對應上。咦,剛好是從 A1A1 - A1A7 。
00004560h:     A1A1  A1A2、 A1A3。 A1A4. A1A5ˉ A1A6? A1A7 ?

如果你在這裡還是看不懂,請試著把這兩個合起來一起看。
00004560h:     A1A1  A1A2、 A1A3。 A1A4. A1A5ˉ A1A6? A1A7 ?
00004560h: 25E5   0030   0130   0230   B700   C902   C702   A800   ;
「全形空白」A1A1 的 unicode 碼是不是 3000 (倒過來看?)
「句號」   A1A3 的 unicode 碼是不是 3002 (倒過來看?)
還沒有昏倒吧?

■範圍
請參照 c_950.nls ,其實都是一樣的。


查看完整版本: [-- BIG5 Extension 計畫(3) 簡體中文 c_936.nls 解析 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.054277 second(s),query:1 Gzip disabled