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

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

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

    Java世界

    學習筆記

    常用鏈接

    統計

    積分與排名

    天籟村

    新華網

    雅虎

    最新評論

    java字符串的各種編碼轉換

    import java.io.UnsupportedEncodingException;

    /**
    ?* 轉換字符串的編碼
    ?*/
    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 轉換格式?*/
    ?public static final String UTF_8 = "UTF-8";

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

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

    ?/**?16 位 UCS 轉換格式,字節順序由可選的字節順序標記來標識?*/
    ?public static final String UTF_16 = "UTF-16";

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

    ?/**
    ? * 將字符編碼轉換成US-ASCII碼
    ? */
    ?public String toASCII(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, US_ASCII);
    ?}
    ?/**
    ? * 將字符編碼轉換成ISO-8859-1碼
    ? */
    ?public String toISO_8859_1(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, ISO_8859_1);
    ?}
    ?/**
    ? * 將字符編碼轉換成UTF-8碼
    ? */
    ?public String toUTF_8(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, UTF_8);
    ?}
    ?/**
    ? * 將字符編碼轉換成UTF-16BE碼
    ? */
    ?public String toUTF_16BE(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, UTF_16BE);
    ?}
    ?/**
    ? * 將字符編碼轉換成UTF-16LE碼
    ? */
    ?public String toUTF_16LE(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, UTF_16LE);
    ?}
    ?/**
    ? * 將字符編碼轉換成UTF-16碼
    ? */
    ?public String toUTF_16(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, UTF_16);
    ?}
    ?/**
    ? * 將字符編碼轉換成GBK碼
    ? */
    ?public String toGBK(String str) throws UnsupportedEncodingException{
    ??return this.changeCharset(str, GBK);
    ?}
    ?
    ?/**
    ? * 字符串編碼轉換的實現方法
    ? * @param str??待轉換編碼的字符串
    ? * @param newCharset?目標編碼
    ? * @return
    ? * @throws UnsupportedEncodingException
    ? */
    ?public String changeCharset(String str, String newCharset)
    ???throws UnsupportedEncodingException {
    ??if (str != null) {
    ???//用默認字符編碼解碼字符串。
    ???byte[] bs = str.getBytes();
    ???//用新的字符編碼生成字符串
    ???return new String(bs, newCharset);
    ??}
    ??return null;
    ?}
    ?/**
    ? * 字符串編碼轉換的實現方法
    ? * @param str??待轉換編碼的字符串
    ? * @param oldCharset?原編碼
    ? * @param newCharset?目標編碼
    ? * @return
    ? * @throws UnsupportedEncodingException
    ? */
    ?public String changeCharset(String str, String oldCharset, String newCharset)
    ???throws UnsupportedEncodingException {
    ??if (str != null) {
    ???//用舊的字符編碼解碼字符串。解碼可能會出現異常。
    ???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("轉換成GBK碼: " + gbk);
    ??System.out.println();
    ??String ascii = test.toASCII(str);
    ??System.out.println("轉換成US-ASCII碼: " + ascii);
    ??gbk = test.changeCharset(ascii,ChangeCharset.US_ASCII, ChangeCharset.GBK);
    ??System.out.println("再把ASCII碼的字符串轉換成GBK碼: " + gbk);
    ??System.out.println();
    ??String iso88591 = test.toISO_8859_1(str);
    ??System.out.println("轉換成ISO-8859-1碼: " + iso88591);
    ??gbk = test.changeCharset(iso88591,ChangeCharset.ISO_8859_1, ChangeCharset.GBK);
    ??System.out.println("再把ISO-8859-1碼的字符串轉換成GBK碼: " + gbk);
    ??System.out.println();
    ??String utf8 = test.toUTF_8(str);
    ??System.out.println("轉換成UTF-8碼: " + utf8);
    ??gbk = test.changeCharset(utf8,ChangeCharset.UTF_8, ChangeCharset.GBK);
    ??System.out.println("再把UTF-8碼的字符串轉換成GBK碼: " + gbk);
    ??System.out.println();
    ??String utf16be = test.toUTF_16BE(str);
    ??System.out.println("轉換成UTF-16BE碼:" + utf16be);
    ??gbk = test.changeCharset(utf16be,ChangeCharset.UTF_16BE, ChangeCharset.GBK);
    ??System.out.println("再把UTF-16BE碼的字符串轉換成GBK碼: " + gbk);
    ??System.out.println();
    ??String utf16le = test.toUTF_16LE(str);
    ??System.out.println("轉換成UTF-16LE碼:" + utf16le);
    ??gbk = test.changeCharset(utf16le,ChangeCharset.UTF_16LE, ChangeCharset.GBK);
    ??System.out.println("再把UTF-16LE碼的字符串轉換成GBK碼: " + gbk);
    ??System.out.println();
    ??String utf16 = test.toUTF_16(str);
    ??System.out.println("轉換成UTF-16碼:" + utf16);
    ??gbk = test.changeCharset(utf16,ChangeCharset.UTF_16LE, ChangeCharset.GBK);
    ??System.out.println("再把UTF-16碼的字符串轉換成GBK碼: " + gbk);
    ??String s = new String("中文".getBytes("UTF-8"),"UTF-8");
    ??System.out.println(s);
    ?}
    }

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


    ??????? java中的String類是按照unicode進行編碼的,當使用String(byte[] bytes, String encoding)構造字符串時,encoding所指的是bytes中的數據是按照那種方式編碼的,而不是最后產生的String是什么編碼方式,換句話說,是讓系統把bytes中的數據由encoding編碼方式轉換成unicode編碼。如果不指明,bytes的編碼方式將由jdk根據操作系統決定。

    ??????? 當我們從文件中讀數據時,最好使用InputStream方式,然后采用String(byte[] bytes, String encoding)指明文件的編碼方式。不要使用Reader方式,因為Reader方式會自動根據jdk指明的編碼方式把文件內容轉換成unicode編碼。

    ??????? 當我們從數據庫中讀文本數據時,采用ResultSet.getBytes()方法取得字節數組,同樣采用帶編碼方式的字符串構造方法即可。

    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");

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

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

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

    評論

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

    感謝分享  回復  更多評論   

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

    謝謝支持!  回復  更多評論   

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

    頂~  回復  更多評論   

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

    inputstreamReader 可以直接指定編碼的……  回復  更多評論   

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

    相當的有用啊,感謝分享  回復  更多評論   

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

    有些編碼不能直接轉換的吧!
      回復  更多評論   

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

    具體情況具體分析,不一定全部適用。  回復  更多評論   

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

    "當使用String(byte[] bytes, String encoding)構造字符串時,encoding所指的是bytes中的數據是按照那種方式編碼的,而不是最后產生的String是什么編碼方"
    完全錯誤,不要誤導讀者.  回復  更多評論   

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

    @Greale
    請加以測試給出結論,請查看String str = new String(bytes, "gb2312");這個字符類的原代碼即可得出答案。  回復  更多評論   

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

    簡直是不負責任呀......全是錯的.......敢不敢看文檔再發  回復  更多評論   

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

    @Greale
    我來說句,下面這個來自jdk的文檔,
    String(byte[] bytes, String charsetName)
    構造一個新的 String,方法是使用指定的字符集解碼指定的字節數組
    rabbit是對的。  回復  更多評論   

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

    謝謝  回復  更多評論   

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

    謝了  回復  更多評論   

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

    謝謝你的幫助!  回復  更多評論   

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

    都是錯的,完全錯誤。  回復  更多評論   

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

    ____。色調  回復  更多評論   

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

    [fts=6][ftf=Wingdings]?[/ft][/ft][/M]  回復  更多評論   

    # re: java字符串的各種編碼轉換 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  回復  更多評論   

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

    這簡直是放屁  回復  更多評論   

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

    dfvgdx  回復  更多評論   

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

    最代碼分享了其中的代碼,分享萬能java字符串編碼轉換工具類,地址:http://www.zuidaima.com/share/1795356301560832.htm  回復  更多評論   

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

    怎么轉都是亂碼是怎么回事?  回復  更多評論   

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

    反正我是轉成功了,謝謝分享!  回復  更多評論   

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

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

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

    祝疲鄭牛攏疲埃啊。
      回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产高清美女在线观看 | 99久9在线|免费| av无码免费一区二区三区| 国产成人综合久久精品免费| 亚洲第一极品精品无码久久| 亚洲色少妇熟女11p| 精品国产污污免费网站 | 57pao国产成视频免费播放| 免费国产在线观看老王影院| 久久亚洲精品无码AV红樱桃| 欧洲精品码一区二区三区免费看| av大片在线无码免费| 亚洲免费网站在线观看| 国产成人AV免费观看| 亚洲一级片内射网站在线观看| 亚洲成av人片在线天堂无| 亚欧色视频在线观看免费| 久久亚洲国产午夜精品理论片| 青柠影视在线观看免费高清| 久久精品国产亚洲av日韩| 久久精品a一国产成人免费网站 | 性色av极品无码专区亚洲| 国产h视频在线观看网站免费| 精品日韩99亚洲的在线发布| 三年片在线观看免费观看大全一 | 久久国产精品免费一区| 国产gav成人免费播放视频| 亚洲综合小说另类图片动图| 四虎影院永久免费观看| 最近免费字幕中文大全| 国产亚洲日韩在线三区| 高潮毛片无遮挡高清免费 | 天天操夜夜操免费视频| 亚洲大尺码专区影院| 国产免费一区二区三区VR| 国产免费AV片在线观看| 亚洲中文字幕无码av永久| 亚洲综合色在线观看亚洲| 嘿嘿嘿视频免费网站在线观看| 色天使亚洲综合一区二区| 国产免费午夜a无码v视频|