續上文,中的\\u00a0是怎麼解釋出來的

 


public
String utf8ToUnicode(String inStr) { char[] myBuffer = inStr.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < inStr.length(); i++) { UnicodeBlock ub = UnicodeBlock.of(myBuffer[i]); if(ub == UnicodeBlock.BASIC_LATIN){ //英文及數字等 sb.append(myBuffer[i]); }else if(ub == UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS){ //全角半角字符 int j = (int) myBuffer[i] - 65248; sb.append((char)j); }else{ //漢字 short s = (short) myBuffer[i]; String hexS = Integer.toHexString(s); String unicode = "\\u"+hexS; sb.append(unicode.toLowerCase()); } } return sb.toString(); }

  以上是utf8轉換成unicode的方法

  同樣有一種反過來的:

  

public static String unicodeToUtf8(String theString) {
          char aChar;
          int len = theString.length();
          StringBuffer outBuffer = new StringBuffer(len);
          for (int x = 0; x < len;) {
              aChar = theString.charAt(x++);
              if (aChar == '\\') {
                  aChar = theString.charAt(x++);
                  if (aChar == 'u') {
                      // Read the xxxx
                      int value = 0;
                      for (int i = 0; i < 4; i++) {
                          aChar = theString.charAt(x++);
                          switch (aChar) {
                              case '0':
                              case '1':
                              case '2':
                              case '3':
                              case '4':
                              case '5':
                              case '6':
                              case '7':
                              case '8':
                              case '9':
                                  value = (value << 4) + aChar - '0';
                              break;
                              case 'a':
                              case 'b':
                              case 'c':
                              case 'd':
                              case 'e':
                              case 'f':
                                  value = (value << 4) + 10 + aChar - 'a';
                              break;
                              case 'A':
                              case 'B':
                              case 'C':
                              case 'D':
                              case 'E':
                              case 'F':
                                  value = (value << 4) + 10 + aChar - 'A';
                              break;
                              default:
                                  throw new IllegalArgumentException("Malformed   \\uxxxx   encoding.");
                          }    
                      }
                      outBuffer.append((char) value);
                  } else {
                      if (aChar == 't')
                          aChar = '\t';
                      else if (aChar == 'r')
                          aChar = '\r';
                      else if (aChar == 'n')
                          aChar = '\n';
                      else if (aChar == 'f')
                          aChar = '\f';
                      outBuffer.append(aChar);
                  }
              } else
                  outBuffer.append(aChar);
          }//end for
          return outBuffer.toString();
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章