真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么防止java程序出現(xiàn)亂碼-創(chuàng)新互聯(lián)

怎么防止java程序出現(xiàn)亂碼?可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營(yíng)銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。

java在字符串中統(tǒng)一用Unicode表示。

對(duì)于任意一個(gè)字符串:String string = “測(cè)試字符串”;

如果源文件是GBK編碼,操作系統(tǒng)默認(rèn)環(huán)境編碼也為GBK,那么編譯的時(shí)候,JVM將按照GBK編碼將字節(jié)數(shù)組解析為字符,然后將字符轉(zhuǎn)換為Unicode格式的字節(jié)數(shù)組,作為內(nèi)部存儲(chǔ)(字節(jié)數(shù)組→字符→Unicode字節(jié)數(shù)組)。

當(dāng)打印這個(gè)字符串時(shí),JVM根據(jù)操作系統(tǒng)本地的語(yǔ)言環(huán)境,將Unicode轉(zhuǎn)換為GBK,然后操作系統(tǒng)將GBK格式的內(nèi)容顯示出來。

當(dāng)源碼文件是UTF-8, 我們需要通知編譯器源碼的格式,javac -encoding utf-8 … , 編譯時(shí),JVM按照utf-8 解析成字符,然后轉(zhuǎn)換為unicode格式的字節(jié)數(shù)組, 那么不論源碼文件是什么格式,同樣的字符串,最后得到的unicode字節(jié)數(shù)組是完全一致的,顯示的時(shí)候,也是轉(zhuǎn)成GBK來顯示(跟OS環(huán)境有關(guān))

亂碼是如何產(chǎn)生的?

本質(zhì)上都是由于字符串原本的編碼格式與讀取時(shí)解析用的編碼格式不一致導(dǎo)致的。

造成亂碼的原因就是因?yàn)槭褂昧隋e(cuò)誤的字符編碼去解碼字節(jié)流,因此當(dāng)我們?cè)谒伎既魏胃谋撅@示有關(guān)的問題時(shí),請(qǐng)時(shí)刻保持清醒:當(dāng)前使用的字符編碼是什么,只有這樣,我們才能正確分析和處理亂碼問題。

java代碼中的亂碼問題如何解決呢?

例如:String s = “測(cè)試字符串”;

System.out.println( new String(s.getBytes(),"UTF-8")); 
//錯(cuò)誤,因?yàn)間etBytes()默認(rèn)使用GBK編碼, 而解析時(shí)使用UTF-8編碼,肯定出錯(cuò)。

其中getBytes()是將Unicode轉(zhuǎn)換為操作系統(tǒng)默認(rèn)格式的字節(jié)數(shù)組,即“測(cè)試字符串”的GBK格式,new String (bytes, Charset) 中的charset 是指定讀取byte的方式,這里指定為UTF-8,即把bytes的內(nèi)容當(dāng)做UTF-8來讀取。

如下兩種方式得到的結(jié)果都是正確的,因?yàn)樗鼈兊脑磧?nèi)容編碼和解析用的編碼是一致的。

System.out.println( new String(s.getBytes(),"GBK"));
System.out.println( new String(s.getBytes("UTF-8"),"UTF-8"));

如何正確的將GBK轉(zhuǎn)UTF-8 ? (實(shí)際上是unicode轉(zhuǎn)UTF-8)

//利用getBytes將unicode字符串轉(zhuǎn)成UTF-8格式的字節(jié)數(shù)組,然后用utf-8 對(duì)這個(gè)字節(jié)數(shù)組解碼成新的字符串
new String( s.getBytes("utf-8") , "utf-8");

UTF-8 轉(zhuǎn)GBK原理也是一樣

new String( s.getBytes("GBK") , "GBK");

其實(shí)核心工作都由getBytes(charset)做了。getBytes的JDK描述:Encoding this String into a sequence of bytes using the named charset,storing the result into a new byte array.

OutputStreamWriter w1 = new OutputStreamWriter(new FileOutputStream("D:\\file1.txt"),"UTF-8");
InputStreamReader( stream, charset)

看完上述內(nèi)容,你們對(duì)防止java程序出現(xiàn)亂碼的方法有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。


本文題目:怎么防止java程序出現(xiàn)亂碼-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/djiojj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部