<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 閱讀(213721) 評論(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 得得得

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


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


    網站導航:
     
    主站蜘蛛池模板: 91免费播放人人爽人人快乐| 免费一看一级毛片人| 77777午夜亚洲| 国产又粗又猛又爽又黄的免费视频| 日日狠狠久久偷偷色综合免费| 亚洲v高清理论电影| 麻豆国产入口在线观看免费| 两个人看www免费视频| 亚洲最大无码中文字幕| 亚洲精品白浆高清久久久久久| 青春禁区视频在线观看直播免费| 疯狂做受xxxx高潮视频免费| 久久国产亚洲高清观看| 四虎免费久久影院| 18成禁人视频免费网站| www成人免费视频| 亚洲私人无码综合久久网| 亚洲大尺度无码无码专区| 国产日产成人免费视频在线观看| 鲁丝片一区二区三区免费| 国产成人+综合亚洲+天堂| 亚洲另类自拍丝袜第1页| 国产亚洲AV手机在线观看| 免费黄色网址入口| 91福利免费视频| a级毛片免费高清毛片视频| 丰满亚洲大尺度无码无码专线| 亚洲美女大bbbbbbbbb| 亚洲桃色AV无码| 免费国产高清视频| 好先生在线观看免费播放| 国产精品99久久免费观看| 一进一出60分钟免费视频| 亚洲最大中文字幕无码网站| 亚洲午夜在线电影| 亚洲成a人片在线观看日本| 国产成人高清亚洲| 亚洲av日韩片在线观看| 日本免费的一级v一片| 日韩精品成人无码专区免费| 国产精彩免费视频|