1. 程式人生 > >將字串的編碼格式轉換為utf-8

將字串的編碼格式轉換為utf-8

方式一:



    
  1. /**
  2. * 將字串的編碼格式轉換為utf-8
  3. *
  4. * @param
    str
  5. * @return Name = new
  6. * String(Name.getBytes("ISO-8859-1"), "utf-8");
  7. */
  8. public
    static String toUTF8(String str)
    {
  9. if (isEmpty(str)) {
  10. return "";
  11. }
  12. try {
  13. if (str.equals( new String(str.getBytes( "GB2312"), "GB2312"))) {
  14. str = new String(str.getBytes( "GB2312"), "utf-8");
  15. return str;
  16. }
  17. } catch (Exception exception) {
  18. }
  19. try {
  20. if (str.equals( new String(str.getBytes( "ISO-8859-1"), "ISO-8859-1"))) {
  21. str = new String(str.getBytes( "ISO-8859-1"), "utf-8");
  22. return str;
  23. }
  24. } catch (Exception exception1) {
  25. }
  26. try {
  27. if (str.equals( new String(str.getBytes( "GBK"), "GBK"))) {
  28. str = new String(str.getBytes( "GBK"), "utf-8");
  29. return str;
  30. }
  31. } catch (Exception exception3) {
  32. }
  33. return str;
  34. }
  35. /**
  36. * 判斷是否為空
  37. *
  38. * @param str
  39. * @return
  40. */
  41. public static boolean isEmpty(String str) {
  42. // 如果字串不為null,去除空格後值不與空字串相等的話,證明字串有實質性的內容
  43. if (str != null && !str.trim().isEmpty()) {
  44. return false; // 不為空
  45. }
  46. return true; // 為空
  47. }


   
java獲取:
   
String name = TypeUtil.toUTF8(request.getParameter("name"));

   
        </div>

亂碼的另一種解決辦法:

request.setCharacterEncoding("UTF-8"),這句話熟悉麼,這句話的意思是:用"utf-8"編碼對客戶端的請求進行重新解碼。

在步驟2之後(或步驟3中)執行,那麼接收到的引數也不會亂碼啦。 

一個小例子:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 import java.io.UnsupportedEncodingException;   public class ConvertEncodingFormat {      /**     * 將一段錯誤解碼的字串重新解碼     */    public static String convertEncodingFormat(String str, String formatFrom, String FormatTo) {      String result = null ;      if (!(str == null || str.length() == 0 )) {        try {          result = new String(str.getBytes(formatFrom), FormatTo);        } catch (UnsupportedEncodingException e) {          e.printStackTrace();        }      }      return result;    }      /**     * test     */    public static void main(String[] args) {      // utf-8編碼      String str = "你好,少年!" ;        // UTF-8編碼的byte流強行用iso-8859-1解碼,毫無疑問的亂碼了      String str1 = convertEncodingFormat(str, "UTF-8" , "iso-8859-1" );      System.out.println(str1);        // 將str1再轉化為byte流,重新用UTF-8解碼,亂碼問題解決      String str2 = convertEncodingFormat(str1, "iso-8859-1" , "UTF-8" );      System.out.println(str2);    }   }

java字串的各種編碼轉換

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 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 ;   }    <