亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? java 編程技術(shù)中漢字問題的分析及解決(轉(zhuǎn)自ibm).txt

?? 我自自己在學(xué)習(xí)過程找到的一些jsp代碼
?? TXT
?? 第 1 頁 / 共 2 頁
字號(hào):
作者:sonymusic
email: sonymusic@china.com
日期:2000-12-18 1:13:46
[h1]Java 編程技術(shù)中漢字問題的分析及解決[/h1]

段明輝
自由撰稿人
2000 年 11月 8日
[hr]在基于 Java 語言的編程中,我們經(jīng)常碰到漢字的處理及顯示的問題。一大堆看不懂的亂碼肯定不是我們?cè)敢饪吹降娘@示效果,怎樣才能夠讓那些漢字正確顯示呢?Java 語言默認(rèn)的編碼方式是UNICODE ,而我們中國(guó)人通常使用的文件和數(shù)據(jù)庫(kù)都是基于 GB2312 或者 BIG5 等方式編碼的,怎樣才能夠恰當(dāng)?shù)剡x擇漢字編碼方式并正確地處理漢字的編碼呢?本文將從漢字編碼的常識(shí)入手,結(jié)合 Java 編程實(shí)例,分析以上兩個(gè)問題并提出解決它們的方案。[hr]


現(xiàn)在 Java 編程語言已經(jīng)廣泛應(yīng)用于互聯(lián)網(wǎng)世界,早在 Sun 公司開發(fā) Java 語言的時(shí)候,就已經(jīng)考慮到對(duì)非英文字符的支持了。Sun 公司公布的 Java 運(yùn)行環(huán)境(JRE)本身就分英文版和國(guó)際版,但只有國(guó)際版才支持非英文字符。不過在 Java 編程語言的應(yīng)用中,對(duì)中文字符的支持并非如同 Java Soft 的標(biāo)準(zhǔn)規(guī)范中所宣稱的那樣完美,因?yàn)橹形淖址恢灰粋€(gè),而且不同的操作系統(tǒng)對(duì)中文字符的支持也不盡相同,所以會(huì)有許多和漢字編碼處理有關(guān)的問題在我們進(jìn)行應(yīng)用開發(fā)中困擾著我們。有很多關(guān)于這些問題的解答,但都比較瑣碎,并不能夠滿足大家迫切解決問題的愿望,關(guān)于 Java 中文問題的系統(tǒng)研究并不多,本文從漢字編碼常識(shí)出發(fā),分析 Java 中文問題,希望對(duì)大家解決這個(gè)問題有所幫助。

[b]漢字編碼的常識(shí)[/b]

我們知道,英文字符一般是以一個(gè)字節(jié)來表示的,最常用的編碼方法是 ASCII 。但一個(gè)字節(jié)最多只能區(qū)分256個(gè)字符,而漢字成千上萬,所以現(xiàn)在都以雙字節(jié)來表示漢字,為了能夠與英文字符分開,每個(gè)字節(jié)的最高位一定為1,這樣雙字節(jié)最多可以表示64K格字符。我們經(jīng)常碰到的編碼方式有 GB2312、BIG5、UNICODE 等。關(guān)于具體編碼方式的詳細(xì)資料,有興趣的讀者可以查閱相關(guān)資料。我膚淺談一下和我們關(guān)系密切的 GB2312 和 UNICODE。GB2312 碼,中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn)漢字信息交換用編碼,是一個(gè)由中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn)總局發(fā)布的關(guān)于簡(jiǎn)化漢字的編碼,通行于中國(guó)大陸地區(qū)及新加坡,簡(jiǎn)稱國(guó)標(biāo)碼。兩個(gè)字節(jié)中,第一個(gè)字節(jié)(高字節(jié))的值為區(qū)號(hào)值加32(20H),第二個(gè)字節(jié)(低字節(jié))的值為位號(hào)值加32(20H),用這兩個(gè)值來表示一個(gè)漢字的編碼。UNICODE 碼是微軟提出的解決多國(guó)字符問題的多字節(jié)等長(zhǎng)編碼,它對(duì)英文字符采取前面加“0”字節(jié)的策略實(shí)現(xiàn)等長(zhǎng)兼容。如 “A” 的 ASCII 碼為0x41,UNICODE 就為0x00,0x41。利用特殊的工具各種編碼之間可以互相轉(zhuǎn)換。

[b]Java 中文問題的初步認(rèn)識(shí)[/b]

我們基于 Java 編程語言進(jìn)行應(yīng)用開發(fā)時(shí),不可避免地要處理中文。Java 編程語言默認(rèn)的編碼方式是 UNICODE,而我們通常使用的數(shù)據(jù)庫(kù)及文件都是基于 GB2312 編碼的,我們經(jīng)常碰到這樣的情況:瀏覽基于 JSP 技術(shù)的網(wǎng)站看到的是亂碼,文件打開后看到的也是亂碼,被 Java 修改過的數(shù)據(jù)庫(kù)的內(nèi)容在別的場(chǎng)合應(yīng)用時(shí)無法繼續(xù)正確地提供信息。 

String sEnglish = “apple”; 

String sChinese = “蘋果”; 

String s = “蘋果 apple ”; 

sEnglish 的長(zhǎng)度是5,sChinese的長(zhǎng)度是4,而 s 默認(rèn)的長(zhǎng)度是14。對(duì)于 sEnglish來說, Java 中的各個(gè)類都支持得非常好,肯定能夠正確顯示。但對(duì)于 sChinese 和 s 來說,雖然 Java Soft 聲明 Java 的基本類已經(jīng)考慮到對(duì)多國(guó)字符的支持(默認(rèn) UNICODE 編碼),但是如果操作系統(tǒng)的默認(rèn)編碼不是 UNICODE ,而是國(guó)標(biāo)碼等。從 Java 源代碼到得到正確的結(jié)果,要經(jīng)過 “Java 源代碼-> Java 字節(jié)碼-> ;虛擬機(jī)->操作系統(tǒng)->顯示設(shè)備”的過程。在上述過程中的每一步驟,我們都必須正確地處理漢字的編碼,才能夠使最終的顯示結(jié)果正確。 

“ Java 源代碼-> Java 字節(jié)碼”,標(biāo)準(zhǔn)的 Java 編譯器 javac 使用的字符集是系統(tǒng)默認(rèn)的字符集,比如在中文 Windows 操作系統(tǒng)上就是 GBK ,而在 Linux 操作系統(tǒng)上就是ISO-8859-1,所以大家會(huì)發(fā)現(xiàn)在 Linux 操作系統(tǒng)上編譯的類中源文件中的中文字符都出了問題,解決的辦法就是在編譯的時(shí)候添加 encoding 參數(shù),這樣才能夠與平臺(tái)無關(guān)。用法是 

javac –encoding GBK。 

“ Java 字節(jié)碼->虛擬機(jī)->操作系統(tǒng)”, Java 運(yùn)行環(huán)境 (JRE) 分英文版和國(guó)際版,但只有國(guó)際版才支持非英文字符。 Java 開發(fā)工具包 (JDK) 肯定支持多國(guó)字符,但并非所有的計(jì)算機(jī)用戶都安裝了 JDK 。很多操作系統(tǒng)及應(yīng)用軟件為了能夠更好的支持 Java ,都內(nèi)嵌了 JRE 的國(guó)際版本,為自己支持多國(guó)字符提供了方便。 

“操作系統(tǒng)->顯示設(shè)備”,對(duì)于漢字來說,操作系統(tǒng)必須支持并能夠顯示它。英文操作系統(tǒng)如果不搭配特殊的應(yīng)用軟件的話,是肯定不能夠顯示中文的。 

還有一個(gè)問題,就是在 Java 編程過程中,對(duì)中文字符進(jìn)行正確的編碼轉(zhuǎn)換。例如,向網(wǎng)頁輸出中文字符串的時(shí)候,不論你是用 

out.println(string);       // string 是含中文的字符串 

還是用 

<%=string%>,都必須作 UNICODE 到 GBK 的轉(zhuǎn)換,或者手動(dòng),或者自動(dòng)。在 JSP 1.0中,可以定義輸出字符集,從而實(shí)現(xiàn)內(nèi)碼的自動(dòng)轉(zhuǎn)換。用法是 

<%@page ContentType=”text/html;charset=gb2312” %> 

但是在一些 JSP 版本中并沒有提供對(duì)輸出字符集的支持,(例如 JSP 0.92),這就需要手動(dòng)編碼輸出了,方法非常多。最常用的方法是 

String s1 = request.getParameter(“keyword”); 

String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”); 

getBytes 方法用于將中文字符以“ISO-8859-1”編碼方式轉(zhuǎn)化成字節(jié)數(shù)組,而“GBK” 是目標(biāo)編碼方式。我們從以ISO-8859-1方式編碼的數(shù)據(jù)庫(kù)中讀出中文字符串 s1 ,經(jīng)過上述轉(zhuǎn)換過程,在支持 GBK 字符集的操作系統(tǒng)和應(yīng)用軟件中就能夠正確顯示中文字符串 s2 。 

[b]Java 中文問題的表層分析及處理[/b]

背景 
 
開發(fā)環(huán)境 
 JDK1.15 
 Vcafe2.0 
 JPadPro 
 
服務(wù)器端 
 NT IIS 
 Sybase System 
 Jconnect(JDBC) 
 
客戶端 
 IE5.0 
 Pwin98 
   
 

.CLASS 文件存放在服務(wù)器端,由客戶端的瀏覽器運(yùn)行 APPLET , APPLET 只起調(diào)入 FRAME 類等主程序的作用。界面包括 Textfield ,TextArea,List,Choice 等。 

I.       取中文 

用 JDBC 執(zhí)行 SELECT 語句從服務(wù)器端讀取數(shù)據(jù)(中文)后,將數(shù)據(jù)用 APPEND 方法加到 TextArea(TA) ,不能正確顯示。但加到 List 中時(shí),大部分漢字卻可正確顯示。 

將數(shù)據(jù)按“ISO-8859-1” 編碼方式轉(zhuǎn)化為字節(jié)數(shù)組,再按系統(tǒng)缺省編碼方式 (Default Character Encoding) 轉(zhuǎn)化為 STRING ,即可在 TA 和 List 中正確顯示。 

程序段如下: 

dbstr2 = results.getString(1); 

//After reading the result from DB server,converting it to string. 

dbbyte1 = dbstr2.getBytes(“iso-8859-1”); 

dbstr1 = new String(dbbyte1); 

在轉(zhuǎn)換字符串時(shí)不采用系統(tǒng)默認(rèn)編碼方式,而直接采用“ GBK” 或者 “GB2312” ,在 A 和 B 兩種情況下,從數(shù)據(jù)庫(kù)取數(shù)據(jù)都沒有問題。 

II.    寫中文到數(shù)據(jù)庫(kù) 

處理方式與“取中文”相逆,先將 SQL 語句按系統(tǒng)缺省編碼方式轉(zhuǎn)化為字節(jié)數(shù)組,再按“ISO-8859-1”編碼方式轉(zhuǎn)化為 STRING ,最后送去執(zhí)行,則中文信息可正確寫入數(shù)據(jù)庫(kù)。 

程序段如下: 

sqlstmt = tf_input.getText(); 

//Before sending statement to DB server,converting it to sql statement. 

dbbyte1 = sqlstmt.getBytes(); 

sqlstmt = newString(dbbyte1,”iso-8859-1”); 

_stmt = _con.createStatement(); 

_stmt.executeUpdate(sqlstmt); 

…… 

問題:如果客戶機(jī)上存在 CLASSPATH 指向 JDK 的 CLASSES.ZIP 時(shí)(稱為 A 情況),上述程序代碼可正確執(zhí)行。但是如果客戶機(jī)只有瀏覽器,而沒有 JDK 和 CLASSPATH 時(shí)(稱為 B 情況),則漢字無法正確轉(zhuǎn)換。 

我們的分析: 

1.經(jīng)過測(cè)試,在 A 情況下,程序運(yùn)行時(shí)系統(tǒng)的缺省編碼方式為 GBK 或者 GB2312 。在 B 情況下,程序啟動(dòng)時(shí)瀏覽器的 JAVA 控制臺(tái)中出現(xiàn)如下錯(cuò)誤信息: 

Can't find resource for sun.awt.windows.awtLocalization_zh_CN 

然后系統(tǒng)的缺省編碼方式為“8859-1”。 

2.如果在轉(zhuǎn)換字符串時(shí)不采用系統(tǒng)缺省編碼方式,而是直接采用 “GBK” 或“GB2312”,則在 A 情況下程序仍然可正常運(yùn)行,在 B 情況下,系統(tǒng)出現(xiàn)錯(cuò)誤: 

UnsupportedEncodingException。 

3.在客戶機(jī)上,把 JDK 的 CLASSES.ZIP 解壓后,放在另一個(gè)目錄中, CLASSPATH 只包含該目錄。然后一邊逐步刪除該目錄中的 .CLASS 文件,另一邊運(yùn)行測(cè)試程序,最后發(fā)現(xiàn)在一千多個(gè) CLASS 文件中,只有一個(gè)是必不可少的,該文件是: 

sun.io.CharToByteDoubleByte.class。 

將該文件拷到服務(wù)器端和其它的類放在一起,并在程序的開頭 IMPORT 它,在 B 情況下程序仍然無法正常運(yùn)行。 

4.在 A 情況下,如果在 CLASSPTH 中去掉 sun.io.CharToByteDoubleByte.class ,則程序運(yùn)行時(shí)測(cè)得默認(rèn)編碼方式為“8859-1”,否則為 “GBK” 或 “GB2312” 。 

如果 JDK 的版本為1.2以上的話,在 B 情況下遇到的問題得到了很好的解決,測(cè)試的步驟同上,有興趣的讀者可以嘗試一下。 

[/b]Java 中文問題的根源分析及解決[/b]

在簡(jiǎn)體中文 MS Windows 98 + JDK 1.3 下,可以用 System.getProperties() 得到 Java 運(yùn)行環(huán)境的一些基本屬性,類 PoorChinese 可以幫助我們得到這些屬性。 

類 PoorChinese 的源代碼: 

public class PoorChinese { 

   public static void main(String[] args) { 

       System.getProperties().list(System.out); 

   } 

} 

執(zhí)行 java PoorChinese 后,我們會(huì)得到: 

系統(tǒng)變量 file.encoding 的值為 GBK ,user.language 的值為 zh , user.region 的值為 CN ,這些系統(tǒng)變量的值決定了系統(tǒng)默認(rèn)的編碼方式是 GBK 。 

在上述系統(tǒng)中,下面的代碼將 GB2312 文件轉(zhuǎn)換成 Big5 文件,它們能夠幫助我們理解 Java 中漢字編碼的轉(zhuǎn)化: 

  

import java.io.*; 

import java.util.*; 

  

public class gb2big5 { 

  

static int iCharNum=0; 

  

public static void main(String[] args) { 

System.out.println("Input GB2312 file, output Big5 file."); 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品网站导航| 天天色天天爱天天射综合| 欧美三级日韩在线| 韩日精品视频一区| 亚洲福利一区二区三区| 国产精品久久久久天堂| 91精品国产乱| 欧美性大战久久| 成人听书哪个软件好| 久久99热狠狠色一区二区| 亚洲自拍偷拍麻豆| 国产精品美女久久久久aⅴ国产馆| 日韩视频免费观看高清完整版| 热久久国产精品| 亚洲二区在线视频| 亚洲自拍偷拍av| 综合色天天鬼久久鬼色| 国产欧美综合在线| 久久久久久久久久美女| 欧美mv日韩mv| 日韩手机在线导航| 7777精品伊人久久久大香线蕉最新版| 99久久99久久久精品齐齐| 国产不卡免费视频| 韩国av一区二区三区四区| 久久精品国产秦先生| 日本欧美久久久久免费播放网| 亚洲国产日产av| 亚洲一级片在线观看| 亚洲精品国产视频| 国产精品一线二线三线精华| 蜜桃久久精品一区二区| 青青草一区二区三区| 天堂影院一区二区| 欧美aaaaaa午夜精品| 日日骚欧美日韩| 日本在线不卡视频一二三区| 午夜精品一区在线观看| 日韩经典中文字幕一区| 三级精品在线观看| 免费在线观看一区| 蜜桃视频第一区免费观看| 久久99精品国产.久久久久久 | 精品成人佐山爱一区二区| 日韩女优av电影| 日韩午夜三级在线| 久久网这里都是精品| 欧美国产一区视频在线观看| 自拍视频在线观看一区二区| 亚洲精品一二三四区| 亚洲高清在线精品| 久久国产日韩欧美精品| 国产91高潮流白浆在线麻豆| 成人av在线播放网站| 色狠狠av一区二区三区| 6080yy午夜一二三区久久| 欧美成人bangbros| 欧美激情自拍偷拍| 一区二区三区色| 五月开心婷婷久久| 国产一区日韩二区欧美三区| 成人高清免费观看| 欧美视频中文字幕| 精品成人在线观看| 亚洲精品国产高清久久伦理二区| 亚洲一区二区在线免费看| 免费高清视频精品| 懂色av一区二区三区免费看| 一本色道久久加勒比精品| 欧美一区二区免费视频| 国产精品三级av在线播放| 亚洲国产精品一区二区久久| 久久66热re国产| 91麻豆文化传媒在线观看| 日韩一区二区高清| 亚洲欧洲精品天堂一级 | 国模套图日韩精品一区二区| 成人黄色在线视频| 制服.丝袜.亚洲.中文.综合| 欧美高清一级片在线观看| 亚洲电影一级片| 粉嫩欧美一区二区三区高清影视| 欧美中文字幕一区二区三区 | 亚洲色图视频网站| 青娱乐精品在线视频| 99精品视频一区二区三区| 91麻豆精品国产91| 1区2区3区国产精品| 日本欧洲一区二区| 色婷婷亚洲精品| 久久久久久久久久美女| 日韩专区中文字幕一区二区| 成人91在线观看| 精品国产自在久精品国产| 一区二区三区日韩精品| 国产精品一区二区91| 91精品国产欧美日韩| 亚洲精品成人悠悠色影视| 国产成人综合网站| 日韩精品一区二区在线| 亚洲午夜免费福利视频| eeuss鲁片一区二区三区| 精品国产一区a| 亚洲123区在线观看| 99久久精品久久久久久清纯| 久久新电视剧免费观看| 日本午夜精品一区二区三区电影| 一本久久a久久精品亚洲| 国产欧美日韩视频一区二区 | 在线观看视频一区二区| 国产精品久久久久久久久免费丝袜| 麻豆视频一区二区| 欧美日韩成人一区| 亚洲午夜一区二区三区| 色综合夜色一区| 国产精品久久久久影院| 国产精品综合网| 精品少妇一区二区三区在线视频| 亚洲国产综合在线| 99re这里都是精品| 国产精品第四页| 波多野洁衣一区| 国产精品色哟哟网站| 国产麻豆精品在线| 久久久激情视频| 国产又黄又大久久| 精品免费日韩av| 精品一区免费av| 久久综合成人精品亚洲另类欧美| 久久精品国产99| 精品日韩一区二区三区免费视频| 欧美aaaaa成人免费观看视频| 欧美精三区欧美精三区| 日韩在线一区二区三区| 这里只有精品视频在线观看| 午夜国产精品一区| 91精品国产日韩91久久久久久| 视频精品一区二区| 日韩精品自拍偷拍| 久久99日本精品| 国产日韩精品一区二区三区 | 中文字幕日韩欧美一区二区三区| 成人午夜视频网站| 亚洲男人都懂的| 欧美综合天天夜夜久久| 亚洲风情在线资源站| 日韩欧美中文字幕公布| 国产精品一区二区在线看| 国产精品色眯眯| 91色乱码一区二区三区| 亚洲电影你懂得| 欧美成人性福生活免费看| 国产乱人伦偷精品视频不卡| 中文字幕精品综合| 在线亚洲一区二区| 日本美女视频一区二区| 久久综合色之久久综合| 成人白浆超碰人人人人| 亚洲国产欧美在线人成| 精品国产免费久久| 91小视频在线| 日韩成人av影视| 国产女人18水真多18精品一级做| 91美女精品福利| 麻豆精品在线视频| 中文字幕亚洲不卡| 91精品国产aⅴ一区二区| 国产一区二区三区综合| 一区二区三区免费观看| 日韩精品专区在线影院观看 | 91免费国产在线观看| 亚洲成人自拍一区| 久久久久久久久久久久久女国产乱 | 欧美日韩一区在线| 国产美女娇喘av呻吟久久| 一区二区成人在线观看| 欧美成人在线直播| 91麻豆精东视频| 韩国毛片一区二区三区| 亚洲一区二区欧美激情| 久久在线免费观看| 91精品1区2区| 国产乱一区二区| 亚洲国产毛片aaaaa无费看 | 亚洲欧美一区二区三区孕妇| 91精品在线一区二区| av在线播放不卡| 久久se这里有精品| 亚洲一区二区三区视频在线| 国产欧美一区二区精品性色| 91精品国产品国语在线不卡| 97久久精品人人做人人爽50路| 九九九久久久精品| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲国产成人在线| 欧美一区二区在线看| 色婷婷av一区二区三区大白胸| 国产精品一区二区在线播放| 日本vs亚洲vs韩国一区三区| 亚洲最新在线观看|