`

javaUnicode字符转换

    博客分类:
  • java
阅读更多

/**
 * Unicode字符集转换
 * 提取于JDK 1.5.0_08 java.util.Properties类的私有方法(loadConvert,saveConvert)
 * 
 * @date 2009-4-7 17:09
 */
public class CharacterSetToolkit {
	
	/**
     * 从 Unicode 码转换成编码前的特殊字符串。
     * @param in Unicode编码的字符数组。
     * @param off 转换的起始偏移量。
     * @param len 转换的字符长度。
     * @param convtBuf 转换的缓存字符数组。
     * @return 完成转换,返回编码前的特殊字符串。
     */
	/*
     * Converts encoded \uxxxx to unicode chars
     * and changes special saved chars to their original forms
     */
    public static String unicodeToString(char[] in, int off, int len, char[] convtBuf) {
        if (convtBuf.length < len) {
            int newLen = len * 2;
            if (newLen < 0) {
	        newLen = Integer.MAX_VALUE;
	    } 
	    convtBuf = new char[newLen];
        }
        char aChar;
        char[] out = convtBuf; 
        int outLen = 0;
        int end = off + len;

        while (off < end) {
            aChar = in[off++];
            if (aChar == '\\') {
                aChar = in[off++];   
                if(aChar == 'u') {
                    // Read the xxxx
                    int value=0;
		    for (int i=0; i<4; i++) {
		        aChar = in[off++];  
		        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.");
                        }
                     }
                    out[outLen++] = (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'; 
                    out[outLen++] = aChar;
                }
            } else {
	        out[outLen++] = (char)aChar;
            }
        }
        return new String (out, 0, outLen);
    }
    
    /**
     * 将字符串编码成 Unicode 。
     * @param theString 待转换成Unicode编码的字符串。
     * @param escapeSpace 是否忽略空格。
     * @return 返回转换后Unicode编码的字符串。
     */
    /*
     * Converts unicodes to encoded &#92;uxxxx and escapes
     * special characters with a preceding slash
     */
    public static String stringToUnicode(String theString, boolean escapeSpace) {
        int len = theString.length();
        int bufLen = len * 2;
        if (bufLen < 0) {
            bufLen = Integer.MAX_VALUE;
        }
        StringBuffer outBuffer = new StringBuffer(bufLen);

        for(int x=0; x<len; x++) {
            char aChar = theString.charAt(x);
            // Handle common case first, selecting largest block that
            // avoids the specials below
            if ((aChar > 61) && (aChar < 127)) {
                if (aChar == '\\') {
                    outBuffer.append('\\'); outBuffer.append('\\');
                    continue;
                }
                outBuffer.append(aChar);
                continue;
            }
            switch(aChar) {
		case ' ':
		    if (x == 0 || escapeSpace) 
			outBuffer.append('\\');
		    outBuffer.append(' ');
		    break;
                case '\t':outBuffer.append('\\'); outBuffer.append('t');
                          break;
                case '\n':outBuffer.append('\\'); outBuffer.append('n');
                          break;
                case '\r':outBuffer.append('\\'); outBuffer.append('r');
                          break;
                case '\f':outBuffer.append('\\'); outBuffer.append('f');
                          break;
                case '=': // Fall through
                case ':': // Fall through
                case '#': // Fall through
                case '!':
                    outBuffer.append('\\'); outBuffer.append(aChar);
                    break;
                default:
                    if ((aChar < 0x0020) || (aChar > 0x007e)) {
                        outBuffer.append('\\');
                        outBuffer.append('u');
                        outBuffer.append(toHex((aChar >> 12) & 0xF));
                        outBuffer.append(toHex((aChar >>  8) & 0xF));
                        outBuffer.append(toHex((aChar >>  4) & 0xF));
                        outBuffer.append(toHex( aChar        & 0xF));
                    } else {
                        outBuffer.append(aChar);
                    }
            }
        }
        return outBuffer.toString();
    }
    
    /**
     * Convert a nibble to a hex character
     * @param	nibble	the nibble to convert.
     */
    private static char toHex(int nibble) {
	return hexDigit[(nibble & 0xF)];
    }
    
    /** A table of hex digits */
    private static final char[] hexDigit = {
	'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
    };
}



分享到:
评论

相关推荐

    Unicode字符转换器

    支持unicode码和字符之间的相互转换

    Java Unicode 和字符集

    Java通过使用`char`类型来表示单个Unicode字符,该类型占用16位,足够表示基本多文种平面上的所有字符。对于超出BMP的字符,Java会使用代理项(surrogate pairs)来表示,即使用两个`char`值来表示一个Unicode字符。...

    java 中文Unicode转换

    将中文字符转换为Unicode编码,可以使用`Character`类的`toChars()`方法,或者直接通过字符串的`codePointAt()`方法获取码点,然后以"\u"开头的十六进制格式表示。例如: ```java String chineseStr = "你好"; for ...

    Unicode字符转换器 2.0

    支持Unicode和字符之间的相互转换,修改了1.0的一个bug。

    中文字符Unicode字符转换

    运行环境Java JDK 5.0 Unicode字符转换为中文字符,中文字符转Unicode字符 Unicode字符只支持以\u####格式 &lt;br&gt;MS有人在找这东西,自己也找过,没找着就自己做了一个,功能简单只满足自己的需求:) pp

    ASCII UNICODE 字符转换

    例如,如果你有一个只包含英文的ASCII文本,而你想要添加一些中文字符,那么就需要将这些新增的字符转换为UNICODE编码。这个过程可能涉及到文本编辑器、编程语言的字符串处理函数,或者专门的转换工具。在编程中,...

    java实现十六进制字符unicode与中英文转换示例

    在Java编程语言中,处理Unicode编码和十六进制字符转换是一项常见的任务,特别是在处理文本数据时。本示例探讨了如何使用Java实现从Unicode十六进制字符串到中英文字符的转换,以及反过来的过程。理解Unicode和UTF...

    Java做的Unicode编码转换器

    2. **Unicode编码到字符转换**:逆向过程,将Unicode编码解析并转换回对应的字符。这需要正确解读每个编码并查找相应的字符。 3. **支持多国语言**:由于Unicode覆盖了世界各地的语言,此转换器能够处理中文、日文...

    字符转换工具类

    4. **Unicode转换**:提供将字符转换为Unicode编码(如`charToUnicode(char c)`)和将Unicode编码还原为字符(如`unicodeToChar(String unicodeStr)`)的方法。 5. **URL编码与解码**:在网络请求中,URL中的特殊...

    关于GBK和Unicode字符集转换乱码问题

    ### 关于GBK和Unicode字符集转换乱码问题 在计算机科学与互联网技术中,字符集是一种用于表示文本的标准集合,不同的字符集适用于不同的语言环境。本文将深入探讨GBK与Unicode这两种字符集之间的转换问题,特别是在...

    JAVA反编译和unicode转字符.rar

    Java反编译与Unicode字符转换是Java开发过程中两个重要的技术环节。反编译是指将已编译的字节码(.class文件)转换回源代码的过程,这对于理解已有的类库或者进行逆向工程非常有用。Unicode是国际通用的字符编码标准,...

    Java String字符串和Unicode字符相互转换代码

    本文将深入探讨如何在Java中将String字符串与Unicode字符进行相互转换。 首先,了解Java中的String类。String是Java中的一个不可变对象,用于表示一系列的字符。每个字符在内存中都有其对应的Unicode编码。Java的...

    JAVA字符串操作类CTool.java字符转换类.rar

    JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...

    Java实现中文字符串与unicode互转工具类

    Java实现中文字符串与unicode互转工具类是指使用Java语言实现中文字符串与unicode码之间的相互转换。这个工具类主要用于解决中文字符串与unicode码之间的转换问题,提供了escape和unescape两个函数,分别用于将中文...

    db2连接驱动

    解决无法将 Unicode 字符串转换为 Ebcdic 字符串的问题

    字符转换为UNICODE工具

    在编程语言中,字符串常量可以使用'\u'后跟四位16进制数来表示UNICODE字符。 5. UNICODE与其他编码的转换 除了UNICODE,还有其他编码方式,如GBK、BIG5等,它们主要用于特定区域的字符表示。在实际应用中,我们可能...

    Unicode 字符集转换

    **Unicode字符集转换详解** Unicode,全称统一码或万国码,是一种为所有现代计算机系统设计的全球字符编码标准。它的目标是为世界上每一种已知的语言提供一个唯一的数字编码,使得各种语言的文字能够在不同的计算机...

    Java String字符串和Unicode字符相互转换代码详解

    字符串转换为Unicode字符序列的常见方法是将每个字符转换为其对应的Unicode转义序列。Java中的String类没有内置方法直接实现这一转换,但可以使用以下方式实现: ```java public static String string2Unicode...

    字符转换成unicode工具

    数值各种进制之间转换,及字符转换成unicode工具,界面友好

    字符编码转换 convert unicode to Shift-JIS

    各类编码转换,从unicode 到 Shift-JIS

Global site tag (gtag.js) - Google Analytics