• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            逛奔的蝸牛

            我不聰明,但我會很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::

            /* 輸出

            Original:       黃   彪彪

            to unicode:     \u9EC4\ \t\u5F6A\u5F6A

            from unicode:   黃   彪彪

            使用命令轉換: native2ascii -encoding utf-8 a.txt a.txt

            Java的properties屬性文件會把字符先轉換成unicode的形式存儲.

            */


            import java.io.UnsupportedEncodingException;


            public class UnicodeConverter {

                public static void main(String[] args) throws UnsupportedEncodingException {

                    String s = "黃 \t彪\u5F6A";

                    System.out.println("Original:\t\t" + s);


                    s = toEncodedUnicode(s, true);

                    System.out.println("to unicode:\t\t" + s);


                    s = fromEncodedUnicode(s.toCharArray(), 0, s.length());

                    System.out.println("from unicode:\t" + s);

                }


                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 形式的字符串. 如 "黃" to "\u9EC4"

                 * Converts unicodes to encoded \\uxxxx and escapes

                 * special characters with a preceding slash

                 * 

                 * @param theString

                 *        待轉換成Unicode編碼的字符串。

                 * @param escapeSpace

                 *        是否忽略空格,為true時在空格后面是否加個反斜杠。

                 * @return 返回轉換后Unicode編碼的字符串。

                 */

                public static String toEncodedUnicode(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)) {

                                // 每個unicode有16位,每四位對應的16進制從高位保存到低位

                                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 形式的字符串轉換成對應的編碼的特殊字符串。 如 "\u9EC4" to "黃".

                 * Converts encoded \\uxxxx to unicode chars

                 * and changes special saved chars to their original forms

                 * 

                 * @param in

                 *        Unicode編碼的字符數組。

                 * @param off

                 *        轉換的起始偏移量。

                 * @param len

                 *        轉換的字符長度。

                 * @param convtBuf

                 *        轉換的緩存字符數組。

                 * @return 完成轉換,返回編碼前的特殊字符串。

                 */

                public static String fromEncodedUnicode(char[] in, int off, int len) {

                    char aChar;

                    char[] out = new char[len]; // 只短不長

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

                }

            }

            posted on 2010-12-21 01:39 逛奔的蝸牛 閱讀(5199) 評論(1)  編輯 收藏 引用 所屬分類: Java

            評論

            # re: Java:轉換漢字為unicode形式的字符串和轉換unicode形式字符串轉換成漢字 2013-07-04 10:52 jd
            jd?  回復  更多評論
              

            7777久久亚洲中文字幕| 久久久久18| 99热成人精品热久久669| 国产精品久久午夜夜伦鲁鲁| 日本免费一区二区久久人人澡| 亚洲狠狠综合久久| 久久亚洲AV成人无码软件| 亚洲国产精品无码久久SM| 精品午夜久久福利大片| 天堂无码久久综合东京热| 久久天堂AV综合合色蜜桃网 | 久久er国产精品免费观看2| 国内精品久久久久久中文字幕| 伊人伊成久久人综合网777| 99久久精品影院老鸭窝| 青青久久精品国产免费看| 高清免费久久午夜精品| AV无码久久久久不卡蜜桃| 国产精品内射久久久久欢欢| 久久99国产精品尤物| 久久午夜免费视频| 国产精品久久久久久久午夜片| 日韩精品久久无码人妻中文字幕| 蜜桃麻豆www久久国产精品| 久久不射电影网| 精品无码久久久久久尤物| 久久天天躁狠狠躁夜夜不卡| 久久久久久av无码免费看大片 | 久久亚洲国产精品五月天婷| 狠狠干狠狠久久| 精品一区二区久久| 97超级碰碰碰久久久久| 999久久久免费精品国产| 久久婷婷五月综合97色一本一本| 久久99热这里只有精品国产| 久久无码AV一区二区三区| 欧美黑人激情性久久| 欧美伊人久久大香线蕉综合 | 色偷偷偷久久伊人大杳蕉| 超级碰碰碰碰97久久久久| 久久无码专区国产精品发布|