• <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 逛奔的蝸牛 閱讀(5203) 評論(1)  編輯 收藏 引用 所屬分類: Java

            評論

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

            国产精品丝袜久久久久久不卡| 国产精品gz久久久| 亚洲国产精品无码久久一线| 亚洲精品高清国产一线久久| 99久久婷婷国产综合亚洲| 久久精品成人免费国产片小草| 合区精品久久久中文字幕一区| 伊人久久综合无码成人网| 久久久久亚洲av无码专区喷水| 久久午夜电影网| 国产69精品久久久久APP下载 | 国产成人精品久久亚洲高清不卡 | 欧美精品福利视频一区二区三区久久久精品 | 性做久久久久久久久浪潮| 国内精品久久久久影院亚洲| 色婷婷综合久久久久中文一区二区 | 久久妇女高潮几次MBA| 18岁日韩内射颜射午夜久久成人| 精品伊人久久大线蕉色首页| 国产 亚洲 欧美 另类 久久| 久久久久无码精品国产不卡| 亚洲人成无码网站久久99热国产| 久久亚洲精品视频| 久久超乳爆乳中文字幕| 久久精品国产亚洲AV久| 色8激情欧美成人久久综合电| 久久AV高清无码| 亚洲精品无码专区久久久| 日日狠狠久久偷偷色综合免费| 久久播电影网| 久久久噜噜噜久久| 久久久久亚洲AV成人网| 久久精品一区二区影院| 人人狠狠综合久久亚洲| 欧美午夜精品久久久久久浪潮| 久久久久九九精品影院| 久久亚洲中文字幕精品一区四 | 99久久精品免费看国产一区二区三区| 久久水蜜桃亚洲av无码精品麻豆 | 久久亚洲精品国产亚洲老地址| 国产精品九九久久免费视频 |