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

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

java源代碼的編碼 java 編碼

java怎么都是*

InputStreamReader in = new InputStreamReader(new FileInputStream(“demo.txt”),”UTF-8”);

創(chuàng)新互聯(lián)建站是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來(lái)公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過(guò)去的十年時(shí)間我們累計(jì)服務(wù)了上千家以及全國(guó)政企客戶,如酒店設(shè)計(jì)等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過(guò)硬的技術(shù)實(shí)力獲得客戶的一致稱揚(yáng)。

給InputStreamReader指定解碼編碼,這樣二者統(tǒng)一就不會(huì)出現(xiàn)亂碼了。

下面說(shuō)說(shuō)字符輸出流。

字符輸出流的原理和字符輸入流的原理一樣,也可以看做是包裝流,其底層還是采用字節(jié)輸出流來(lái)寫文件。只是字符輸出流根據(jù)指定的編碼將字符轉(zhuǎn)換為字節(jié)的。字符輸出流的主要類是:OutputStreamWriter。Java api解釋如下:OutputStreamWriter 是字符流通向字節(jié)流的橋梁:使用指定的 charset 將要向其寫入的字符編碼為字節(jié)。它使用的字符集可以由名稱指定或顯式給定,否則可能接受平臺(tái)默認(rèn)的字符集。說(shuō)的很明白了,它需要一個(gè)編碼將寫入的字符轉(zhuǎn)換為字節(jié),如果沒(méi)有指定則采用GBK編碼,那么輸出的字節(jié)都將是GBK編碼,生成的文件也是GBK編碼的。如果采用以下方式構(gòu)造OutputStreamWriter:

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(“dd.txt”),”UTF-8”);

那么寫入的字符將被編碼為UTF-8的字節(jié),生成的文件也將是UTF-8格式的。

問(wèn)題二: 既然讀文件要使用和文件編碼一致的編碼,那么javac編譯文件也需要讀取文件,它使用什么編碼呢?

這個(gè)問(wèn)題從來(lái)就沒(méi)想過(guò),也從沒(méi)當(dāng)做是什么問(wèn)題。正是因?yàn)閱?wèn)題一而引發(fā)的思考,其實(shí)這里還是有東西可以挖掘的。下面分三種情況來(lái)探討,這三種情況也是我們常用的編譯java源文件的方法。

1.javac在控制臺(tái)編譯java類文件。

通常我們手動(dòng)建立一個(gè)java文件Demo.java,并保存。此時(shí)Demo.java文件的編碼為ANSI,中文操作系統(tǒng)下就是GBK.然后使用javac命令來(lái)編譯該源文件。”javac Demo.java”。Javac也需要讀取java文件,那么javac是使用什么編碼來(lái)解碼我們讀取的字節(jié)呢?其實(shí)javac采用了操作系統(tǒng)默認(rèn)的GBK編碼解碼我們讀取的字節(jié),這個(gè)編碼正好也是Demo.java文件的編碼,二者一致,所以不會(huì)出現(xiàn)亂碼情況。讓我們來(lái)做點(diǎn)手腳,在保存Demo.java文件時(shí),我們選擇UTF-8保存。此時(shí)Demo.java文件編碼就是UTF-8了。我們?cè)偈褂谩眏avac Demo.java”來(lái)編譯,如果Demo.java里含有中文字符,此時(shí)控制臺(tái)會(huì)出現(xiàn)警告信息,也出現(xiàn)了亂碼。究其原因,就是因?yàn)閖avac采用了GBK編碼解碼我們讀取的字節(jié)。因?yàn)槲覀兊淖止?jié)是UTF-8編碼的,所以會(huì)出現(xiàn)亂碼。如果不信的話你可以自己試試。那么解決辦法呢?解決辦法就是使用javac的encoding參數(shù)來(lái)制定我們的解碼編碼。如下:javac -encoding UTF-8 Demo.java。這里我們指定了使用UTF-8來(lái)解碼讀取的字節(jié),由于這個(gè)編碼和Demo.java文件編碼一致,所以不會(huì)出現(xiàn)亂碼情況了。

2.Eclipse中編譯java文件。

我習(xí)慣把Eclipse的編碼設(shè)置成UTF-8。那么每個(gè)項(xiàng)目中的java源文件的編碼就是UTF-8。這樣編譯也從沒(méi)有問(wèn)題,也沒(méi)有出現(xiàn)過(guò)亂碼。正是因?yàn)檫@樣才掩蓋了使用javac可能出現(xiàn)的亂碼。那么Eclipse是如何正確編譯文件編碼為UTF-8的java源文件的呢?唯一的解釋就是Eclipse自動(dòng)識(shí)別了我們java源文件的文件編碼,然后采取了正確的encoding參數(shù)來(lái)編譯我們的java源文件。功勞都?xì)w功于IDE的強(qiáng)大了。

3.使用Ant來(lái)編譯java文件。

Ant也是我常用的編譯java文件的工具。首先,必須知道Ant在后臺(tái)其實(shí)也是采用javac來(lái)編譯java源文件的,那么可想而知,1會(huì)出現(xiàn)的問(wèn)題在Ant中也會(huì)存在。如果我們使用Ant來(lái)編譯UTF-8編碼的java源文件,并且不指定如何編碼,那么也會(huì)出現(xiàn)亂碼的情況。所以Ant的編譯命令有一個(gè)屬性” encoding”允許我們指定編碼,如果我們要編譯源文件編碼為UTF-8的java文件,那么我們的命令應(yīng)該如下:

指定了編碼也就相當(dāng)于”javac –encoding”了,所以不會(huì)出現(xiàn)亂碼了。

如何獲取java源文件編碼格式

java中主要使用charset這個(gè)類來(lái)判斷文件的編碼格式,代碼如下:

package?com.ghj.packageoftool;

import?info.monitorenter.cpdetector.io.ASCIIDetector;

import?info.monitorenter.cpdetector.io.ByteOrderMarkDetector;

import?info.monitorenter.cpdetector.io.CodepageDetectorProxy;

import?info.monitorenter.cpdetector.io.JChardetFacade;

import?info.monitorenter.cpdetector.io.ParsingDetector;

import?info.monitorenter.cpdetector.io.UnicodeDetector;

import?java.io.ByteArrayInputStream;

import?java.io.File;

import?java.io.InputStream;

import?java.net.URL;

import?java.nio.charset.Charset;

/**

*?文件工具類

*?

*?@author?高煥杰

*/

public?class?FileTool?{

/**

*?獲取本地文件的編碼格式

*?

*?@param?file?要判斷的文件編碼格式

*?

*?@author?高煥杰

*/

public?static?String?getLocalFileEncode(File?localFile)?{

/*

*?cpDetector是探測(cè)器,它把探測(cè)任務(wù)交給具體的探測(cè)實(shí)現(xiàn)類的實(shí)例完成。

*?cpDetector內(nèi)置了一些常用的探測(cè)實(shí)現(xiàn)類,這些探測(cè)實(shí)現(xiàn)類的實(shí)例可以通過(guò)add方法?加進(jìn)來(lái),如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

*?cpDetector按照“誰(shuí)最先返回非空的探測(cè)結(jié)果,就以該結(jié)果為準(zhǔn)”的原則返回探測(cè)到的字符集編碼。cpDetector是基于統(tǒng)計(jì)學(xué)原理的,不保證完全正確。

*/

CodepageDetectorProxy?codepageDetector?=?CodepageDetectorProxy.getInstance();

codepageDetector.add(new?ParsingDetector(false));//ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構(gòu)造方法中的參數(shù)用于指示是否顯示探測(cè)過(guò)程的詳細(xì)信息,為false不顯示。

codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數(shù)文件的編碼?測(cè)定。所以,一般有了這個(gè)探測(cè)器就可滿足大多數(shù)項(xiàng)目的要求,如果你還不放心,可以再多加幾個(gè)探測(cè)器,比如下面的ASCIIDetector、UnicodeDetector等。

codepageDetector.add(new?ByteOrderMarkDetector());??

codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII編碼測(cè)定

codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族編碼的測(cè)定

Charset?charset?=?null;

try?{

charset?=?codepageDetector.detectCodepage(localFile.toURI().toURL());

if?(charset?!=?null){

return?charset.name();

}

}?catch?(Exception?e)?{

e.printStackTrace();

}

return?null;

}

/**

*?獲得遠(yuǎn)程URL文件的編碼格式

*?

*?@param?url?遠(yuǎn)程文件的URL路徑

*?

*?@author?高煥杰

*/

public?static?String?getURLFileEncode(URL?url)?{

/*

*?cpDetector是探測(cè)器,它把探測(cè)任務(wù)交給具體的探測(cè)實(shí)現(xiàn)類的實(shí)例完成。

*?cpDetector內(nèi)置了一些常用的探測(cè)實(shí)現(xiàn)類,這些探測(cè)實(shí)現(xiàn)類的實(shí)例可以通過(guò)add方法?加進(jìn)來(lái),如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

*?cpDetector按照“誰(shuí)最先返回非空的探測(cè)結(jié)果,就以該結(jié)果為準(zhǔn)”的原則返回探測(cè)到的字符集編碼。cpDetector是基于統(tǒng)計(jì)學(xué)原理的,不保證完全正確。

*/

CodepageDetectorProxy?codepageDetector?=?CodepageDetectorProxy.getInstance();

codepageDetector.add(new?ParsingDetector(false));//ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構(gòu)造方法中的參數(shù)用于指示是否顯示探測(cè)過(guò)程的詳細(xì)信息,為false不顯示。

codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數(shù)文件的編碼?測(cè)定。所以,一般有了這個(gè)探測(cè)器就可滿足大多數(shù)項(xiàng)目的要求,如果你還不放心,可以再多加幾個(gè)探測(cè)器,比如下面的ASCIIDetector、UnicodeDetector等。

codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII編碼測(cè)定

codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族編碼的測(cè)定

Charset?charset?=?null;

try?{

charset?=?codepageDetector.detectCodepage(url);

if?(charset?!=?null){

return?charset.name();

}

}?catch?(Exception?e)?{

e.printStackTrace();

}

return?null;

}

/**

*?獲得文件流的編碼格式

*?

*?@param?inputStream?文件流

*?

*?@author?高煥杰

*/

public?static?String?getInputStreamEncode(InputStream?inputStream)?{

/*

*?cpDetector是探測(cè)器,它把探測(cè)任務(wù)交給具體的探測(cè)實(shí)現(xiàn)類的實(shí)例完成。

*?cpDetector內(nèi)置了一些常用的探測(cè)實(shí)現(xiàn)類,這些探測(cè)實(shí)現(xiàn)類的實(shí)例可以通過(guò)add方法?加進(jìn)來(lái),如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

*?cpDetector按照“誰(shuí)最先返回非空的探測(cè)結(jié)果,就以該結(jié)果為準(zhǔn)”的原則返回探測(cè)到的字符集編碼。cpDetector是基于統(tǒng)計(jì)學(xué)原理的,不保證完全正確。

*/

CodepageDetectorProxy?codepageDetector?=?CodepageDetectorProxy.getInstance();

codepageDetector.add(new?ParsingDetector(false));//ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構(gòu)造方法中的參數(shù)用于指示是否顯示探測(cè)過(guò)程的詳細(xì)信息,為false不顯示。

codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數(shù)文件的編碼?測(cè)定。所以,一般有了這個(gè)探測(cè)器就可滿足大多數(shù)項(xiàng)目的要求,如果你還不放心,可以再多加幾個(gè)探測(cè)器,比如下面的ASCIIDetector、UnicodeDetector等。

codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII編碼測(cè)定

codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族編碼的測(cè)定

Charset?charset?=?null;

try?{

charset?=?codepageDetector.detectCodepage(inputStream,?0);

if?(charset?!=?null){

return?charset.name();

}

}?catch?(Exception?e)?{

e.printStackTrace();

}

return?null;

}

/**

*?獲得字符串的編碼格式

*?

*?@param?stringValue?要判斷的文件編碼格式字符串

*?

*?@author?高煥杰

*/

public?static?String?getStringEncode(String?stringValue)?{

/*

*?cpDetector是探測(cè)器,它把探測(cè)任務(wù)交給具體的探測(cè)實(shí)現(xiàn)類的實(shí)例完成。

*?cpDetector內(nèi)置了一些常用的探測(cè)實(shí)現(xiàn)類,這些探測(cè)實(shí)現(xiàn)類的實(shí)例可以通過(guò)add方法?加進(jìn)來(lái),如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

*?cpDetector按照“誰(shuí)最先返回非空的探測(cè)結(jié)果,就以該結(jié)果為準(zhǔn)”的原則返回探測(cè)到的字符集編碼。cpDetector是基于統(tǒng)計(jì)學(xué)原理的,不保證完全正確。

*/

CodepageDetectorProxy?codepageDetector?=?CodepageDetectorProxy.getInstance();

codepageDetector.add(new?ParsingDetector(false));//ParsingDetector可用于檢查HTML、XML等文件或字符流的編碼,構(gòu)造方法中的參數(shù)用于指示是否顯示探測(cè)過(guò)程的詳細(xì)信息,為false不顯示。

codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數(shù)文件的編碼?測(cè)定。所以,一般有了這個(gè)探測(cè)器就可滿足大多數(shù)項(xiàng)目的要求,如果你還不放心,可以再多加幾個(gè)探測(cè)器,比如下面的ASCIIDetector、UnicodeDetector等。

codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII編碼測(cè)定

codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族編碼的測(cè)定

Charset?charset?=?null;

try?{

InputStream?inputStream?=?new?ByteArrayInputStream(stringValue.getBytes());

charset?=?codepageDetector.detectCodepage(inputStream,?3);

if?(charset?!=?null){

return?charset.name();

}

}?catch?(Exception?e)?{

e.printStackTrace();

}

return?null;

}

}

java源代碼與字節(jié)碼文件類型有哪些

java源文件的格式是text/html類型的,可以直接用記事本打開(kāi)。編碼可以是utf-8,也可以是其它類型的。后綴為.java

源文件編譯后的字節(jié)碼是以CAFE BABY開(kāi)頭的二進(jìn)制文件。需要JVM才能讀懂。后綴為.class

一般來(lái)說(shuō),一個(gè)類對(duì)應(yīng)一個(gè)字節(jié)碼文件,內(nèi)部類編譯后也會(huì)生成一個(gè)單獨(dú)的字節(jié)碼文件。字節(jié)碼文件是以類名來(lái)命名(標(biāo)識(shí))的。

一些相關(guān)的字節(jié)碼文件可以按照包結(jié)構(gòu)打包成jar文件。jar文件和zip文件差不多。

java程序一般都會(huì)依賴很多的jar文件,比如最基本的rt.jar。


當(dāng)前名稱:java源代碼的編碼 java 編碼
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/hpiecd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部