史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 作業系統操作技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-05-18, 04:08 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 於DBCS的小知識

於DBCS的小知識

今天再一次開啟everest,又發現了那個很久以前就疑惑地問題——DBCS是什麼意思?


今天查了一下,原來DBCS和我們熟悉的Unicode從概念上來說是並列的。

UNICODE是世界性的字元集,幾乎包含了世界上的所有字元,每個字元都有一個單一的UNICODE值。

DBCS是亞洲的字元集,包含了ANSI,ANSI也就是ASCII值為0-255之間的字元,當字元為ANSI時,存放於文件中佔用的是一個字元。如果是非ANSI的呢,則佔用兩字元。

UNICODE的意義在於能讓不同環境下的作業系統識別。比如說吧,你在中文的作業系統下使用記事本寫了一篇文本文章。但你要拿到別的環境下的WIN2K下檢視(比如美國的電腦,作業系統為英文,程式碼頁也是美國),即使該電腦已經安裝了中文字體,即使用WORD這樣的編輯軟體開啟也肯定是亂碼一堆。這是為什麼呢?因為英文的WIN2K作業系統只能識別UNICODE。並不能識別亞洲的DBCS碼。

解決方法只要你把它轉換為UNICODE碼存放就OK了。像Utrla Edit就能轉換。WIN2K裡也有程式碼轉換器可以,而WIN2K下的記事本則可以用另chun為UNICODE碼。UNICODE碼存放的文本文件與普通的文本文件不同之處僅僅是文件頭加了"FF FE"而已。其他的則是程式碼值不同。只要轉換了字元的程式碼,並在文件前加上"FF FE"這兩個字元,就是把這篇中文文章儲存為UNICODE格式了。

轉換成UNICODE格式後,英文作業系統的機器只要用WORD開啟你的文件就能檢視(為什麼用WORD是因為它有字體識別功能。普通記事本只把文字連接到系統字體上,而英文系統的預設值字體可不是不包含中文的,當然就顯示不出來)

有興趣的可以詳細的閱讀這篇文章


首先DBCS是亞洲的字元集,包含了ANSI,ANSI也就是ASCII值為0-255之間的字元,當字元為ANSI時,存放於文件中佔用的是一個字元。如果是非ANSI的呢,則佔用兩字元。用VB的ASC函數可以很容易得到一個字元的DBCS值(或是說ANSI值吧)

假如一個字元得到的DBCS值為&H1234,當然,這個值是轉換成了十六進制的,因為對於磁牒存放來說,一般使用位(BIT),即二進制存放,而顯示字元呢用十六進制顯示則非常直觀。存放在文件中即"12 34"(這是用十六進制文本編輯器中檢視到的形式)

而UNICODE是世界性的字元集,幾乎包含了世界上的所有字元,每個字元都有一個單一的UNICODE值。UNICODE值也是佔用兩個字元的。但不同的是它雖然也包含了標準的ANSI字元值,但是ANSI字元只佔用一個字元,UNICODE會自動在ANSI值後加入一個值為0的字元。比如說一個ANSI值為&h45的字元,以UNICODE形式存放則為"45 00"。至於如何用VB得到一個字元的UNICODE值,ASCW函數可以輕鬆搞定。但是普通的非ANSI字元以UNICODE形式時則是從右存到左的。比如一個值為&H1234的字元,存為UNICODE時則為"34 12"

知道了這些有什麼用呢?UNICODE的意義在於能讓不同環境下的作業系統識別。比如說吧,你在中文的作業系統下使用記事本寫了一篇文本文章。但你要拿到別的環境下的WIN2K(之所以選WIN2K,是因為WIN2K支持UNICODE,否則用WIN98只能用外接中文平台才能檢視)下檢視(比如美國的電腦,作業系統為英文,程式碼頁也是美國(WIN2K有設定程式碼頁)),即使該電腦已經安裝了中文字體,即使用WORD這樣的編輯軟體開啟也肯定是亂碼一堆。這是為什麼呢?因為英文的WIN2K作業系統只能識別UNICODE呀!並不能識別咱們亞洲的DBCS碼呀!
解決方法只要你把它轉換為UNICODE碼存放就OK了!像Utrla Edit就能轉換。WIN2K裡也有程式碼轉換器可以,而WIN2K下的記事本則可以用另chun為UNICODE碼。如果你使用的是WIN9X,則可以自己用VB解決了。UNICODE碼存放的文本文件與普通的文本文件不同之處僅僅是文件頭加了"FF FE"而已。其他的則是程式碼值不同。只要轉換了字元的程式碼,並在文件前加上"FF FE"這兩個字元,就是把這篇中文文章儲存為UNICODE格式了!轉換成UNICODE格式後,英文作業系統的機器只要用WORD開啟你的文件就能檢視了!(為什麼用WORD是因為它有字體識別功能。普通記事本只把文字連接到系統字體上,而英文系統的預設值字體可不是不包含中文的喲!當然就顯示不出來啦)


EXE等可執行文件的字串存放格式也差不多都是這樣的。不過VB編寫的程序有點意思,有些字元以DBCS存放,有些則是以UNICODE存放的。而其他工具編譯的文件則大多為DBCS單一檔案類型存放。DBCS存放的字元修改起來非常容易。使用UE這樣的十六進制文本編輯器搜尋要修改的字串,只要把「搜尋ASCII」打上勾就OK了。但是用UNICODE存放的就不好這麼找了。這下我們可以用VB來解決啦!前面已經提到,像一個值為&h1234的字元存放在文件中為"34 12"
那麼我們用VB的ASCW函數得到它的十六進制值,再把值反過來不就可以了嗎?反過來後再把這個值拿到UE中去搜尋,不要把「搜尋ASCII」選上,這下我們要修改的文字就能找到了!再用VB把要取代進去的文字也轉成相同的形式,再到UE裡對照相應的值修改即可。


一般來說,VB裡事先在開發環境下存放好的字元,如LABEL中的字元,就是以DBCS存放的。而硬編碼在EXE中的文字。比如:
MSGBOX "這是編譯在程式碼中的文字"
其中這幾個中文字元就是以UNICODE形式存放的。還有資源文件中的字串資源亦是如此。
這樣一來,即使軟體作者硬編碼在EXE中的文字我們都可以隨意修改嘍。HOHO


希望我寫這篇文章對大家能有所說明 。


附:理論上程序使用UNICODE能不受作業系統環境影響,(WINDOWS的說明 上亦是如此之說)。但實際上因為受到字體連接等環境因素影響,並不能正常的顯示出文字。要使軟體國際化還是建議使用資源文件,多建幾個不同程式碼頁的字串表。這樣一來方便以後修改,二來對於EXE程序的資源佔用也有好處。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 09:58 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1