?? visual basic6編程中的漢字處理 ----- 程序設計聯盟 - pgsun_com.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.pgsun.com/doc/200513/20051126840166.htm -->
<HTML><HEAD><TITLE>Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN.com</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/style.css"
type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2900.2604" name=GENERATOR></HEAD>
<BODY leftMargin=0
background="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/bg.gif"
topMargin=0>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1 height=46></TD>
<TD vAlign=bottom
background="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/top_01.jpg"
height=52>
<TABLE cellSpacing=5 width="100%" border=0>
<TBODY>
<TR>
<TD width="76%" height=37><IMG height=31
src="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/logo1.gif"
width=117></TD>
<TD vAlign=bottom width="24%"><IMG height=5
src="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/logo2.gif"
width=169></TD></TR></TBODY></TABLE></TD>
<TD width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1></TD>
<TD bgColor=#333333 height=25>
<SCRIPT language=javascript
src="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/adv_dh.js"></SCRIPT>
</TD>
<TD width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1 height=32></TD>
<TD>
<SCRIPT language=javascript
src="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/adv_top.js"></SCRIPT>
</TD>
<TD width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1 height=238></TD>
<TD vAlign=top>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
background="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/top_02.jpg"
border=0>
<TBODY>
<TR>
<TD width="6%"><IMG height=25
src="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/mid_01.jpg"
width=4></TD>
<TD width="87%">位置:<A href="http://www.pgsun.com/default.asp">首頁</A>
>> <A
href="http://www.pgsun.com/class.asp?id=mm1&idc=mm2">文件字符</A></TD>
<TD align=right width="7%"><IMG height=25
src="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/top_03.jpg"
width=4></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD><B> Visual Basic6編程中的漢字處理</B></TD></TR>
<TR>
<TD height=1>
<TABLE cellSpacing=1 cellPadding=0 width="100%" align=center
bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD bgColor=#f1f1f1 height=24>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR align=middle>
<TD width="24%">作者: 不詳</TD>
<TD width="30%">來源:不詳</TD>
<TD width="25%">上傳日期: 2005-11-26</TD>
<TD width="21%">點擊數:
<SCRIPT language=javascript
src="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/hits.htm"></SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD bgColor=#ffffff height=33>
<TABLE cellPadding=3 width="100%" border=0>
<TBODY>
<TR>
<TD><FONT
color=#666666> 版權申明:本站部分文章來源于互聯網,版權歸原作者所有,其他網站及傳媒如需使用,請于原作者聯系。本站如有侵權請您與我們聯系。站內文章僅供學習參考之用,任何人不得用于商業目的。
</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE cellPadding=5 width="99%" align=center border=0>
<TBODY>
<TR>
<TD><BR>Visual Basic6編程中的漢字處理
<P></P>
<P><BR> 在DOS時代,擁有一個華麗的漢字菜單幾乎是每個高檔中文應用程序必須的包裝。中文Windows操作系統的出現使得高級開發平臺實現全中文的提示和界面非常容易和方便。在一般的應用程序中已經很少需要去專門考慮漢字處理的問題。
</P>
<P> 但是在許多工程控制和字符串處理的環境中,漢字字符的處理仍然有別于西文字符的處理,需要加以專門的考慮。
<BR> 一、VB6對漢字處理的支持
<BR> 對漢字處理,VB6主要是提供了一些輸入法設置方面的支持。它提供了一個ImeMode屬性和ImeStatus函數來確定和設置輸入法的狀態。而且此屬性和方法只在VB6的東亞區版本中有效。
</P>
<P> IMEStatus函數返回一個整數,用來指定當前Windows的輸入法(IME)方式。
<BR> 下面是中文地區的返回值: <BR> 常數 值 描述 <BR> vbIMENoOP 0 不安裝IME(缺省)
<BR> vbIMEOn 1 打開IME <BR> ImeMode屬性返回或者設置被選定的對象的 IME (Input
Method <BR>Editor,輸入方法編輯器)狀態。
<BR> 可以先用ImeStatus函數來檢測當前的輸入狀態,并用IMEMode來控制其輸入狀態。
<BR> 如Text1.IMEMode=0(預定值)、=1(切換為中文輸入)、=2(切換為英文輸入)
<BR> 對于簡體漢字和繁體漢字 IME,只能使用設置 0 到 2。設置 3 到 10 對于漢字系統是無效的。
<BR> VB6功能上對漢字處理的直接支持也僅限于此。對于漢字字符串的處理,VB6并沒有提供專門的函數和方法。
<BR> 二、確定漢字字符串的長度 <BR> 各個版本的VB對漢字字符的長度定義并不相同。在Windows
<BR>3.x中,VB3中認為每個漢字的長度為2字節。VB自從32位版本以後,不管中英文字,均以2
<BR>bytes來儲存,這與中文Win95的漢字內核有關。但是VB4以后,VB認為每個漢字的長度為1。這在處理包含漢字的字符串時帶來很多的不便。
</P>
<P> 由于Len、Left、Mid等字符串函數認為一個漢字和一個西文字符的長度都為1,因此處理漢字字符串時有一定的難度。實現上必須要能把漢字按照兩個字符(字節)的形式讀出。因此在截取漢字字符串的子串時需特別注意。
</P>
<P> 由于漢字處理和漢字字模存儲的特殊性,在許多情況下我們希望漢字字符的長度為2,英文字符為1。由于VB5和VB6把一個漢字作為一個字符。因此處理漢字時首先必須能正確判斷漢字字符串的長度。
</P>
<P> 在VB3或C++里,漢字的
<BR>ASCII碼均大于零,而VB5和VB6中漢字的ASCII碼小于0。因此通過判斷一個未知字符的ASCII碼就可以判斷該字符是否漢字。
</P>
<P> 這里我們提供了兩種方法來判斷漢字字符串的長度。 <BR> 1、方法1
<BR> VB6中提供了LenB函數用于字符串中的字節數據。如同在雙字節字符集(DBCS)語言中一樣,LenB返回的是用于代表字符串的字節數,而不是返回字符串中字符的數量。如為用戶自定義類型,LenB返回在內存中的大小。
</P>
<P> LenB(StrConv(Str1,vbFormUnicode))
<BR> 對要處理的字符串Str1,必須先使用StrConv函數把ANSI格式的Byte數組轉換為字符串,否則直接使用LenB函數得到的結果比實際結果大。
</P>
<P> 2、方法2
<BR> 這里自定義了一個子函數CLen來計算漢字字符串的實際長度。同時還能判斷字符串中漢字的實際個數。
<BR> Function CLen(HzStr$) as Integer <BR> Static HzNum as
Integer <BR> L = len(HzStr$) <BR> For n=1 to L <BR> If
Asc(mid$( HzStr$,n,1))<0 Then HzNum = HzNum + 1 <BR> Next n
<BR> Clen = L + HzNum <BR> End Function
<BR> CLen函數中的靜態變量HzNum返回字符串中實際漢字的數目。 <BR> 三、漢字字模讀寫和存儲的機理
<BR> 計算機是以編碼的方式來處理和使用字符的。西文字符采用一個字節表示,即ASCII碼,一般只用七位來表示128個字符,而把最高位用作奇偶校驗(或者不用)。我國國標規定漢字用內碼表示,內碼為兩個字節。為了保證中西文兼容,也就是說漢字系統的內碼必須同時允許ASCII碼和漢字的使用,兩者之間不應發生沖突。目前規定每個字節只用七位,若兩個字節的最高位均為1,則該字符為漢字。
</P>
<P> 國標對漢字字庫的結構作了統一規定,即將字庫分成若干個區,每個區有94個漢字,每個漢字在字庫中有確定的區和位,因此每個漢字各有一個區位碼,知道了區位碼也就相當于知道了漢字在字庫中的位置。由于漢字的內碼與區位碼有一定的關系,所以只要通過漢字的內碼就可得到該漢字的區位碼,也就得到了該漢字的字模。
</P>
<P> 查找一個漢字字模數據的算法為: <BR> 漢字內碼 -> 區位碼 -> 記錄號 -> 字模數據
<BR> 一個16點陣漢字其字模數據共有32字節,可以看作是一條記錄,在程序中可以用一個數組存放。在DOS的圖形模式下,漢字是通過描點的方法逐點畫上去的。讀取字模中每個字節的每一位,就能確定漢字中的每個點。故一個16×16點陣的漢字必須要32個字節的字模數據才能確定。
</P>
<P> 以下是DOS的圖形模式下顯示一個16×16點陣漢字時的描點順序圖。每兩個字節的字模數據確定一行。
<BR> 四、VB6中實現漢字字模轉換的技巧
<BR> 在許多工程控制的應用環境中,經常需要對標準的漢字字模進行調整和轉換。
<BR> 要對漢字字模進行轉換首先應該正確地讀出16點陣漢字在字庫中的32字節的字模數據。設某一漢字的內碼為ddff,其中dd表示區內碼,ff表示位內碼,則dd-&Ha1為該漢字的區碼,ff-&Ha1為該漢字的位碼。則該漢字在字庫中的位置為:
</P>
<P> Location = [(dd-&Ha1)×94 + (ff-&Ha1)]×32
<BR> 需要注意的是,以何種方式從字庫文件中讀取這32字節也是一個關鍵問題。由于二進制(Binary)方式訪問文件可以直接查看文件中指定的字節,而且二進制方式也是唯一支持用戶到文件的任何位置讀寫任意長度數據的方法。因而以二進制方式打開漢字字庫文件是最適合的。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -