<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java世界

    學(xué)習(xí)筆記

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    天籟村

    新華網(wǎng)

    雅虎

    最新評(píng)論

    java字符串的各種編碼轉(zhuǎn)換

    import java.io.UnsupportedEncodingException;

    /**
    ?* 轉(zhuǎn)換字符串的編碼
    ?*/
    public class ChangeCharset {
    ?/**?7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁塊?*/
    ?public static final String US_ASCII = "US-ASCII";

    ?/**?ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1?*/
    ?public static final String ISO_8859_1 = "ISO-8859-1";

    ?/**?8 位 UCS 轉(zhuǎn)換格式?*/
    ?public static final String UTF_8 = "UTF-8";

    ?/**?16 位 UCS 轉(zhuǎn)換格式,Big Endian(最低地址存放高位字節(jié))字節(jié)順序?*/
    ?public static final String UTF_16BE = "UTF-16BE";

    ?/**?16 位 UCS 轉(zhuǎn)換格式,Little-endian(最高地址存放低位字節(jié))字節(jié)順序?*/
    ?public static final String UTF_16LE = "UTF-16LE";

    ?/**?16 位 UCS 轉(zhuǎn)換格式,字節(jié)順序由可選的字節(jié)順序標(biāo)記來(lái)標(biāo)識(shí)?*/
    ?public static final String UTF_16 = "UTF-16";

    ?/**?中文超大字符集?*/
    ?public static final String GBK = "GBK";

    ?/**
    ? * 將字符編碼轉(zhuǎn)換成US-ASCII碼
    ? */
    ?public String toASCII(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, US_ASCII);
    ?}
    ?/**
    ? * 將字符編碼轉(zhuǎn)換成ISO-8859-1碼
    ? */
    ?public String toISO_8859_1(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, ISO_8859_1);
    ?}
    ?/**
    ? * 將字符編碼轉(zhuǎn)換成UTF-8碼
    ? */
    ?public String toUTF_8(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, UTF_8);
    ?}
    ?/**
    ? * 將字符編碼轉(zhuǎn)換成UTF-16BE碼
    ? */
    ?public String toUTF_16BE(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, UTF_16BE);
    ?}
    ?/**
    ? * 將字符編碼轉(zhuǎn)換成UTF-16LE碼
    ? */
    ?public String toUTF_16LE(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, UTF_16LE);
    ?}
    ?/**
    ? * 將字符編碼轉(zhuǎn)換成UTF-16碼
    ? */
    ?public String toUTF_16(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, UTF_16);
    ?}
    ?/**
    ? * 將字符編碼轉(zhuǎn)換成GBK碼
    ? */
    ?public String toGBK(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, GBK);
    ?}
    ?
    ?/**
    ? * 字符串編碼轉(zhuǎn)換的實(shí)現(xiàn)方法
    ? * @param str??待轉(zhuǎn)換編碼的字符串
    ? * @param newCharset?目標(biāo)編碼
    ? * @return
    ? * @throws UnsupportedEncodingException
    ? */
    ?public String changeCharset(String str, String newCharset)
    ???throws UnsupportedEncodingException {
    ??if (str != null) {
    ???//用默認(rèn)字符編碼解碼字符串。
    ???byte[] bs = str.getBytes();
    ???//用新的字符編碼生成字符串
    ???return new String(bs, newCharset);
    ??}
    ??return null;
    ?}
    ?/**
    ? * 字符串編碼轉(zhuǎn)換的實(shí)現(xiàn)方法
    ? * @param str??待轉(zhuǎn)換編碼的字符串
    ? * @param oldCharset?原編碼
    ? * @param newCharset?目標(biāo)編碼
    ? * @return
    ? * @throws UnsupportedEncodingException
    ? */
    ?public String changeCharset(String str, String oldCharset, String newCharset)
    ???throws UnsupportedEncodingException {
    ??if (str != null) {
    ???//用舊的字符編碼解碼字符串。解碼可能會(huì)出現(xiàn)異常。
    ???byte[] bs = str.getBytes(oldCharset);
    ???//用新的字符編碼生成字符串
    ???return new String(bs, newCharset);
    ??}
    ??return null;
    ?}

    ?public static void main(String[] args) throws UnsupportedEncodingException {
    ??ChangeCharset test = new ChangeCharset();
    ??String str = "This is a 中文的 String!";
    ??System.out.println("str: " + str);
    ??String gbk = test.toGBK(str);
    ??System.out.println("轉(zhuǎn)換成GBK碼: " + gbk);
    ??System.out.println();
    ??String ascii = test.toASCII(str);
    ??System.out.println("轉(zhuǎn)換成US-ASCII碼: " + ascii);
    ??gbk = test.changeCharset(ascii,ChangeCharset.US_ASCII, ChangeCharset.GBK);
    ??System.out.println("再把ASCII碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
    ??System.out.println();
    ??String iso88591 = test.toISO_8859_1(str);
    ??System.out.println("轉(zhuǎn)換成ISO-8859-1碼: " + iso88591);
    ??gbk = test.changeCharset(iso88591,ChangeCharset.ISO_8859_1, ChangeCharset.GBK);
    ??System.out.println("再把ISO-8859-1碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
    ??System.out.println();
    ??String utf8 = test.toUTF_8(str);
    ??System.out.println("轉(zhuǎn)換成UTF-8碼: " + utf8);
    ??gbk = test.changeCharset(utf8,ChangeCharset.UTF_8, ChangeCharset.GBK);
    ??System.out.println("再把UTF-8碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
    ??System.out.println();
    ??String utf16be = test.toUTF_16BE(str);
    ??System.out.println("轉(zhuǎn)換成UTF-16BE碼:" + utf16be);
    ??gbk = test.changeCharset(utf16be,ChangeCharset.UTF_16BE, ChangeCharset.GBK);
    ??System.out.println("再把UTF-16BE碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
    ??System.out.println();
    ??String utf16le = test.toUTF_16LE(str);
    ??System.out.println("轉(zhuǎn)換成UTF-16LE碼:" + utf16le);
    ??gbk = test.changeCharset(utf16le,ChangeCharset.UTF_16LE, ChangeCharset.GBK);
    ??System.out.println("再把UTF-16LE碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
    ??System.out.println();
    ??String utf16 = test.toUTF_16(str);
    ??System.out.println("轉(zhuǎn)換成UTF-16碼:" + utf16);
    ??gbk = test.changeCharset(utf16,ChangeCharset.UTF_16LE, ChangeCharset.GBK);
    ??System.out.println("再把UTF-16碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
    ??String s = new String("中文".getBytes("UTF-8"),"UTF-8");
    ??System.out.println(s);
    ?}
    }

    ------------------------------------------------------------------------------------------------------------------


    ??????? java中的String類是按照unicode進(jìn)行編碼的,當(dāng)使用String(byte[] bytes, String encoding)構(gòu)造字符串時(shí),encoding所指的是bytes中的數(shù)據(jù)是按照那種方式編碼的,而不是最后產(chǎn)生的String是什么編碼方式,換句話說(shuō),是讓系統(tǒng)把bytes中的數(shù)據(jù)由encoding編碼方式轉(zhuǎn)換成unicode編碼。如果不指明,bytes的編碼方式將由jdk根據(jù)操作系統(tǒng)決定。

    ??????? 當(dāng)我們從文件中讀數(shù)據(jù)時(shí),最好使用InputStream方式,然后采用String(byte[] bytes, String encoding)指明文件的編碼方式。不要使用Reader方式,因?yàn)镽eader方式會(huì)自動(dòng)根據(jù)jdk指明的編碼方式把文件內(nèi)容轉(zhuǎn)換成unicode編碼。

    ??????? 當(dāng)我們從數(shù)據(jù)庫(kù)中讀文本數(shù)據(jù)時(shí),采用ResultSet.getBytes()方法取得字節(jié)數(shù)組,同樣采用帶編碼方式的字符串構(gòu)造方法即可。

    ResultSet rs;
    bytep[] bytes = rs.getBytes();
    String str = new String(bytes, "gb2312");

    不要采取下面的步驟。

    ResultSet rs;
    String str = rs.getString();
    str = new String(str.getBytes("iso8859-1"), "gb2312");

    ??????? 這種編碼轉(zhuǎn)換方式效率底。之所以這么做的原因是,ResultSet在getString()方法執(zhí)行時(shí),默認(rèn)數(shù)據(jù)庫(kù)里的數(shù)據(jù)編碼方式為iso8859-1。系統(tǒng)會(huì)把數(shù)據(jù)依照iso8859-1的編碼方式轉(zhuǎn)換成unicode。使用str.getBytes("iso8859-1")把數(shù)據(jù)還原,然后利用new String(bytes, "gb2312")把數(shù)據(jù)從gb2312轉(zhuǎn)換成unicode,中間多了好多步驟。

    ??????? 從HttpRequest中讀參數(shù)時(shí),利用reqeust.setCharacterEncoding()方法設(shè)置編碼方式,讀出的內(nèi)容就是正確的了。

    posted on 2008-03-27 15:03 Rabbit 閱讀(213721) 評(píng)論(25)  編輯  收藏

    評(píng)論

    # re: java字符串的各種編碼轉(zhuǎn)換 2008-11-19 10:47 邀月

    感謝分享  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 [未登錄] 2008-11-19 15:21 rabbit

    謝謝支持!  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2008-12-02 16:44 3分毒

    頂~  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2009-03-20 15:27 清閑散人

    inputstreamReader 可以直接指定編碼的……  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 [未登錄] 2009-03-23 18:13 yxw

    相當(dāng)?shù)挠杏冒。兄x分享  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2009-07-24 11:24 1111

    有些編碼不能直接轉(zhuǎn)換的吧!
      回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 [未登錄] 2009-07-24 13:55 Rabbit

    具體情況具體分析,不一定全部適用。  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2009-09-02 15:46 Greale

    "當(dāng)使用String(byte[] bytes, String encoding)構(gòu)造字符串時(shí),encoding所指的是bytes中的數(shù)據(jù)是按照那種方式編碼的,而不是最后產(chǎn)生的String是什么編碼方"
    完全錯(cuò)誤,不要誤導(dǎo)讀者.  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 [未登錄] 2009-09-03 08:34 Rabbit

    @Greale
    請(qǐng)加以測(cè)試給出結(jié)論,請(qǐng)查看String str = new String(bytes, "gb2312");這個(gè)字符類的原代碼即可得出答案。  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2009-11-06 13:24 tayoto

    簡(jiǎn)直是不負(fù)責(zé)任呀......全是錯(cuò)的.......敢不敢看文檔再發(fā)  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 [未登錄] 2009-12-06 22:28 wolf

    @Greale
    我來(lái)說(shuō)句,下面這個(gè)來(lái)自jdk的文檔,
    String(byte[] bytes, String charsetName)
    構(gòu)造一個(gè)新的 String,方法是使用指定的字符集解碼指定的字節(jié)數(shù)組
    rabbit是對(duì)的。  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 [未登錄] 2009-12-07 16:47 dong

    謝謝  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 [未登錄] 2010-02-11 10:24 lbom

    謝了  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2011-04-02 13:51 tw

    謝謝你的幫助!  回復(fù)  更多評(píng)論   

    # 錯(cuò)的,大家不要照搬 2011-05-25 10:37 someone

    都是錯(cuò)的,完全錯(cuò)誤。  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2012-06-06 21:50 chenliang

    ____。色調(diào)  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2012-08-18 16:32 陳心

    [fts=6][ftf=Wingdings]?[/ft][/ft][/M]  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2012-10-13 00:46 Ricky

    CHANKWOON KAY¥?¥Í/¤p©j
    ¿Dªù®æÄõ°s©±?¬¨ì§Aªº–q©?¥Ó∏?.
    ¥H¤U¬O§Aªº–q©?¸ê®Æ:
    ©m?W: CHAN KWOON KAY
    Ápµ¸’q¸Ü:
    ’q¶l?a§}: kwoonkay@gmail.com
    ¶Ç¯u:
    ¤J?í¤é´Á: 2013?~02¤ë10¤é
    °h©?¤é´Á: 2013?~02¤ë11¤é
    ¯è¯Z¸ê®Æ:
    ©?¶¡Ã?«¬©MπÆ¥Ø
    ºô¤W¯S´f®MÀ\: 1 ¶¡
    π?·Ç«È©?: 1 ¶¡
    »¨µØ«È©?: 0 ¶¡
    °ª¯Å«È©?: 0 ¶¡
    ®a®x«È©?: 0 ¶¡
    ?æ¬F®M©?: 0 ¶¡
    ·Rºû©Ô®M©?: 0 ¶¡
    ©?¶¡¯S§O–n¨D:
    ¥Ó∏?¤é´Á: 2012-10-13 12:33

    ¥»’q¶l¥Ñ¿Dªù®æÄõ°s©±ºô¯¸±H¥X¡C ®æÄõ°s©±Ápµ¸¸ê®Æ:
    ?a§}: ¤¤°ê ¿Dªù?®¥J’ÅπÖ§ÈÁ`·?°¨¸ô822¸’
    ’q¸Ü: (853) 821666 ¶Ç¯u: (853) 820333
    §K¶O–q©?’q¸Ü: 800 - 903295
    §K¶O–q©?¶Ç¯u: 800 - 903296  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2012-11-23 15:08 阿斯頓

    這簡(jiǎn)直是放屁  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2013-05-05 15:57 dsx

    dfvgdx  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2014-04-25 16:37 最代碼

    最代碼分享了其中的代碼,分享萬(wàn)能java字符串編碼轉(zhuǎn)換工具類,地址:http://www.zuidaima.com/share/1795356301560832.htm  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2014-05-12 13:24 性感的咸鴨蛋

    怎么轉(zhuǎn)都是亂碼是怎么回事?  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2014-07-29 10:37 feilian09

    反正我是轉(zhuǎn)成功了,謝謝分享!  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2014-11-04 17:32 zuidaima

    java字符串操作教程代碼實(shí)例下載:http://zuidaima.com/share/k%E5%AD%97%E7%AC%A6%E4%B8%B2-p1-s1.htm  回復(fù)  更多評(píng)論   

    # re: java字符串的各種編碼轉(zhuǎn)換 2014-12-01 22:07 得得得

    祝疲鄭牛攏疲埃啊。
      回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲乱亚洲乱淫久久| 美女黄频免费网站| 夜夜春亚洲嫩草影院| 成年女人免费视频播放体验区| 成年免费a级毛片免费看无码| 久久精品国产亚洲av天美18| 亚洲一级毛片中文字幕| 亚洲AV成人精品网站在线播放| 亚洲精品成人在线| 免费网站看v片在线香蕉| 四虎在线最新永久免费| 久久香蕉国产线看免费| a级毛片在线免费看| 一级毛片免费不卡| 阿v视频免费在线观看| 亚洲avav天堂av在线网毛片| 中文日韩亚洲欧美制服| 亚洲午夜电影一区二区三区| 久久久久久亚洲Av无码精品专口 | 日木av无码专区亚洲av毛片| 国产亚洲精品高清在线| 久久精品国产精品亚洲艾草网美妙 | 超pen个人视频国产免费观看| 免费看美女裸露无档网站| 精品无码无人网站免费视频 | 亚洲精品国产美女久久久| 亚洲日韩国产精品乱| 亚洲国产成人久久一区WWW| 免费在线观看理论片| heyzo亚洲精品日韩| 亚洲人成电影网站国产精品 | 国产国产人免费人成成免视频| 免费人妻精品一区二区三区| 黄色三级三级三级免费看| 男男gvh肉在线观看免费| 色天使亚洲综合一区二区| 欧美日韩亚洲精品| 日韩精品无码永久免费网站| 一级特黄色毛片免费看| 丁香花在线观看免费观看图片| a色毛片免费视频|