`

Unicode与中文转换工具类

 
阅读更多

在上一家公司做Android注入时,如果注入中文会有问题,需要将中文转换为unicode码注入,在网上查了一下转换工具类,大多数都是如下的解决方案:

 

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);
     }
     
}

使用方法如下:

 

public static void main(String[] args){
    	 String theString="中文汉字+123";
    	 System.out.println(cstk.toUnicode(theString, false));
    	 System.out.println(cstk.fromUnicode(theString.toCharArray(), 0, theString.length(), new char[1024]));
     }

希望对看到的人有所帮助。

分享到:
评论

相关推荐

    unicode utf-8 汉字转换工具类

    unicode utf-8 汉字转换工具类 unicode utf-8 汉字转换工具类 unicode utf-8 汉字转换工具类

    汉字与unicode转换工具

    总的来说,汉字与Unicode转换工具的目的是帮助开发者和用户在不同编码系统之间进行有效的数据交换和处理,确保汉字信息的准确无误。这样的工具通常会提供接口或者命令行选项,允许用户选择输入和输出的编码格式,...

    unicode和中文互相转换工具

    unicode和中文互相转换工具,支持不同编码格式。

    文本与unicode转换工具

    本文将深入探讨“文本与Unicode转换工具”及其相关知识点,帮助你理解和利用这种工具进行有效的文本处理。 首先,我们来理解什么是Unicode。Unicode是一个非营利组织制定的字符集,它为每个字符分配了一个唯一的...

    unicode中文互相转换工具

    一个html页面 用js 实现 unicode中文互相转换工具。方便快捷

    Unicode和汉字互相转换工具

    Unicode与汉字的转换工具有多种实现方式,这里提到的是一个基于Java开发的工具,使用了Eclipse作为集成开发环境,并且兼容JDK7。Eclipse是一个广泛使用的开源IDE,尤其适合Java开发者,提供了丰富的代码编辑、调试和...

    unicode和汉字转换

    了解Unicode和汉字转换的概念以及如何利用工具进行操作,对于在跨平台和跨系统环境中处理中文数据的IT专业人士来说,是非常基础且实用的技能。通过熟练掌握这一知识点,可以避免许多因编码不匹配而引发的问题,提高...

    DFM文件UniCode汉字简繁体双向转换工具

    从Delphi7开始,窗体文件dfm里的汉字都变成了#28162#31992之类的形式,看起来非常不直观。 而且在Delphi2009,delphi2010里,甚至在IDE的View As TExt模式下,看到的也是#28162#31992...对Pas文件的汉字转换也是适用的。

    Unicode—汉字互相转换工具

    这个“Unicode—汉字互相转换工具”正是基于这一标准,为用户提供了一个便捷的平台来查询汉字与Unicode编码之间的相互转换。 在信息技术领域,Unicode的重要性不言而喻。它解决了早期计算机系统中各种不同的字符...

    汉字UNICODE互换工具.exe

    汉字UNICODE互换工具就是为了解决这类问题而生的,它能将文本数据中的汉字从一种编码格式转换为另一种,例如将GBK编码的文本转换成UNICODE编码,以便在支持UNICODE的系统上正常显示。 使用这款工具,用户可以方便地...

    汉字unicode相互转换器

    - **编程**:在编写多语言程序或处理文本数据时,程序员需要将汉字转换为Unicode以便处理。 - **网页开发**:网页编码通常使用UTF-8,这是一种基于Unicode的编码格式,开发者在处理中文字符时会用到这种转换。 - **...

    Unicode码转换工具

    Unicode码转换工具就是专门用来处理这种编码转换的软件,尤其对于中文字符,它能够帮助我们将汉字转换成Unicode编码形式,或者将Unicode编码还原为可读的汉字。 Unicode编码系统采用16位或32位的二进制数来表示每一...

    Unicode 中文转换工具

    有的时候,遇见中文都被转化成了Unicode内码,看着很不爽,于是写了这么个小工具,用来将Unicode内码转换为中文,可以实现整篇的转换。 另外,此工具也可以将中英文转换为Unicode内码(您可以选择是否将英文转换)...

    中文汉字与Unicode编码转换工具.rar

    本源码是一个中文汉字与Unicode编码转换工具,采用WinForm进行开发,实现中文...菜单功能:1、中文汉字转换成Unicode编码2、Unicode编码转换成中文汉字注意事项:1、开发环境为Visual Studio 2012,使用.net 4.5开发。

    ASCII & Unicode 转换工具 v2.3.3

    《ASCII与Unicode转换工具v2.3.3详解》 在计算机世界中,字符编码扮演着至关重要的角色,它使得计算机能理解和处理人类语言。ASCII和Unicode是两种广泛使用的字符编码标准,它们各自有着独特的特点和应用场景。...

    中文与Unicode编码转换小工具

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

    unicode 转换工具 集合

    在IT领域,Unicode是一种标准化的字符...这个“unicode转换工具集合”对于处理多语言环境下的数据转换和解析非常有用,无论你是开发者还是日常用户,掌握这类工具的使用都能提升你在处理字符编码问题上的效率和准确性。

    unicode批量转换工具

    Unicode批量转换工具是一种实用软件,专门设计用于帮助用户将TXT文本文件批量转化为Unicode编码格式。在信息技术领域,Unicode是一个国际标准,它定义了一个字符集,包括世界上几乎所有的书写系统,确保了不同语言的...

    非常好的Unicode编码转换工具- 五号影院提供

    五号影院提供的这个“非常好的Unicode编码转换工具”是一款专门用于Unicode编码与汉字之间相互转换的应用程序。对于电影网站的站长来说,这样的工具尤其有用,因为他们可能需要处理来自不同地区的用户评论或者元数据...

    汉字UNICODE转换工具

    汉字UNICODE转换工具

Global site tag (gtag.js) - Google Analytics