2008-03-23

Java 中文于unicode 互转

关键字: java unicode convert 转换
package com.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class UnicodeByteUtil {
	public static void main(String[] args) {
		UnicodeByteUtil instance = new UnicodeByteUtil();
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				System.in));
		String line;

		try {
			while ((line = reader.readLine()) != null) {
				if (line.trim().equals("q"))
					System.exit(0);
				String s = instance.getBytes(line);
				System.out.println("bytes:" + s);
				// System.out.println("line:"+);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	String getBytes(String s) {
		try {
			StringBuffer out = new StringBuffer("");
			byte[] bytes = s.getBytes("unicode");
			for (int i = 0; i < bytes.length; i++)
				System.out.println(bytes[i]);
			for (int i = 2; i < bytes.length - 1; i += 2) { // *
				out.append("\\u");
				String str = Integer.toHexString(bytes[i + 1] & 0xff);// **
				for (int j = str.length(); j < 2; j++) {
					out.append("0");// ***
				}
				String str1 = Integer.toHexString(bytes[i] & 0xff);
				out.append(str);
				out.append(str1);
			}
			return out.toString();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}
}


public   static   String   loadConvert(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);   
                  }   
                  return   outBuffer.toString();   
          }

private   static   String   unicodeToGB(String   s)   {   
          StringBuffer   sb   =   new   StringBuffer();   
          StringTokenizer   st   =   new   StringTokenizer(s,   "\\u");   
          while   (st.hasMoreTokens())   {   
              sb.append(   (char)   Integer.parseInt(st.nextToken(),   16));   
          }   
          return   sb.toString();   
      }
评论
发表评论

您还没有登录,请登录后发表评论