`
张国锋
  • 浏览: 58618 次
  • 性别: Icon_minigender_1
  • 来自: 山东青岛
社区版块
存档分类
最新评论

中文转unicode编码

    博客分类:
  • Java
 
阅读更多

/**
 * CharacterSetToolkit.java
 *
 * Created on 2007年5月17日, 上午11:04
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package mobi.chenwei.util;

/**
 * 进行字符操作的工具类。
 * @author ChenWei
 * @website www.chenwei.mobi
 * @email chenweionline@hotmail.com
 */
public class CharacterSetToolkit {
    
    /** Creates a new instance of CharacterSetToolkit */
    public CharacterSetToolkit() {
    }
    
    private static final char[] hexDigit = {
        '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
    };
    
    private static char toHex(int nibble) {
        return hexDigit[(nibble & 0xF)];
    }
    
    /**
     * 将字符串编码成 Unicode 。
     * @param theString 待转换成Unicode编码的字符串。
     * @param escapeSpace 是否忽略空格。
     * @return 返回转换后Unicode编码的字符串。
     */
    public static String toUnicode(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();
    }
    
    /**
     * 从 Unicode 码转换成编码前的特殊字符串。
     * @param in Unicode编码的字符数组。
     * @param off 转换的起始偏移量。
     * @param len 转换的字符长度。
     * @param convtBuf 转换的缓存字符数组。
     * @return 完成转换,返回编码前的特殊字符串。
     */
    public String fromUnicode(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);
    }
}
 
分享到:
评论

相关推荐

    TXT电子书批量转换中文Unicode编码

    它是一个高效、便捷的解决方案,帮助用户将TXT格式的电子书从非Unicode编码转换为Unicode编码,确保在各种设备上都能正确显示中文字符。 Unicode是一种国际标准,包含了世界上几乎所有的字符集,包括中文字符。它的...

    excel 公式 自动转换unicode编码为汉字

    excel 公式 自动转换unicode编码为汉字

    java 中文Unicode转换

    在Java编程语言中,Unicode编码是一种广泛使用的字符集,它包含了世界上几乎所有的文字,包括中文。Unicode使得在程序中处理不同语言的文本变得更加方便。本文将深入探讨如何在Java中进行中文字符到Unicode编码的...

    Unicode码转中文和中文转Unicode码的最简便的方法

    中文转Unicode码和Unicode码转中文的过程在Java环境下可以通过`native2ascii`工具轻松实现,这个工具是Java开发工具包(JDK)的一部分。 **中文转Unicode码**: 1. 首先,你需要确保已经安装了Java JDK。JDK包含了...

    Unicode转中文 Unicode字符串 转中文编码

    本文将深入探讨标题和描述中提到的“Unicode转中文”以及“字符串转Unicode”的相关知识点。 首先,Unicode是一种国际标准的字符编码体系,旨在统一全球所有语言的字符表示,它包含了几乎世界上所有的文字和符号。...

    Unicode中文编码对照表

    压缩包内的“unicode编码表.pdf”文件很可能是一个详细的Unicode中文编码对照表,列出了每个中文字符对应的Unicode值,这对于开发者调试代码、理解字符编码问题或者进行文本处理非常有用。这种表格通常会包括字符的...

    中文unicode编码表.rar

    《中文Unicode编码表详解》 Unicode编码,全称为统一码或万国码,是一种在计算机上表示文本的标准化方式,旨在解决全球不同语言字符的表示问题。中文Unicode编码表是Unicode标准的一部分,它包含了所有中文字符的...

    VB 6.0 AscW将汉字转换为Unicode字符代码.rar

    本源码演示VB 6.0 如何将汉字转换为Unicode字符代码,在窗口中输入汉字,单击按钮,即可将汉字转换为Unicode字符,其实这个实现起来也比较简单,用VB内置函数AscW即可实现,代码的编写可参考如下:  Private Sub ...

    中文与Unicode编码转换小工具

    小巧好用的编码转换工具,输入中文,一点按钮就出来转换后的unicode

    Unicode编码转换源码

    Unicode编码是一种国际标准,旨在解决不同语言和字符集之间的兼容性问题。Unicode编码转换源码主要关注如何在不同的编码格式之间进行转换,如从普通字符到Unicode,以及从Unicode到UTF-8编码。 首先,我们来了解...

    C++11 Unicode编码转换

    在C++11标准中,Unicode编码转换是一个重要的更新,主要涉及了新的数据类型和字符串定义方式,以解决跨平台的Unicode字符处理问题。这里详细解释一下这些知识点: 1. **char16_t 和 char32_t 类型**: 在C++98之前...

    C语言字符编码转换UNICODE、GBK、UTF-8互相转换

    GBK编码使用两个字节来表示一个字符,与UNICODE相比,它不是全球通用的,主要用于中文环境。 UTF-8是一种变长的编码方式,它可以使用1到4个字节来表示一个字符。对于ASCII字符,UTF-8使用单个字节,而对于其他...

    中文与Unicode互转工具

    “中文与Unicode互转工具”主要功能包括两部分:将中文编码转换为Unicode编码,以及将Unicode编码转换回中文编码。这对于需要在不同编码系统间进行数据传输或者解析来自不同编码源的数据时非常有用。例如,在串口...

    中文转化为unicode格式的方法类

    在编程领域,Unicode 是一种字符编码标准,它旨在表示世界上所有语言的文字,包括中文。Unicode 编码使得跨平台和跨语言的文本处理变得更加简单。本文将深入探讨如何将中文字符转换为 Unicode 格式,并介绍一个名为 ...

    excel 汉字unicode编码

    可快速查找汉字unicode编码,有十进制,十六进制

    汉字与unicode编码(十六进制)对照表

    在这个“汉字与unicode编码(十六进制)对照表”中,我们可以找到汉字与其对应的Unicode编码,这对于编程、文本处理以及国际化和本地化工作来说具有重要的参考价值。 Unicode编码系统包括多个平面,其中基本多文种...

    中文转Unicode

    中文转Unicode,顾名思义,就是将中文字符转换成Unicode编码的过程。这个过程对于跨平台、多语言的文本处理至关重要,因为Unicode是全球通用的标准,能够确保不同系统和设备都能正确显示和处理各种语言的文本,包括...

    将中文转换成unicode格式

    例如,在进行短信发送时,为了确保中文字符能够在不同系统间正确显示,通常需要将中文内容转换为Unicode编码格式。 要进行中文到Unicode的转换,首先需要准备一些基础工具和了解必要的步骤。根据提供的文件内容,...

    中英文与Unicode码互转

    《中英文与Unicode码互转》是一款非常实用的工具,主要功能是帮助用户将中文和英文字符转换成Unicode编码,反之亦然。Unicode是一种全球通用的字符编码标准,旨在为世界上所有的文字提供一个统一的表示方式,使得...

    游戏通用Unicode编码转换

    Unicode编码转换是确保不同操作系统、编程语言以及设备间文本数据兼容性的关键步骤。在这个场景下,“游戏通用Unicode编码转换”意味着游戏开发者需要处理各种字符编码方式,以确保游戏中文字的正确显示,无论用户是...

Global site tag (gtag.js) - Google Analytics