• <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?  回復  更多評論
              

            日韩影院久久| 2021少妇久久久久久久久久| 久久久久无码精品国产不卡| 一本色道久久综合| 久久亚洲精品无码AV红樱桃| 久久精品国产精品青草app| 久久精品成人| 无码人妻久久一区二区三区免费| 久久超乳爆乳中文字幕| 久久91这里精品国产2020| 亚洲精品乱码久久久久久按摩| 国产精品福利一区二区久久| 久久精品极品盛宴观看| 天天爽天天爽天天片a久久网| 无码八A片人妻少妇久久| 91亚洲国产成人久久精品| 久久精品国产男包| 亚洲精品高清一二区久久| 72种姿势欧美久久久久大黄蕉| 伊人精品久久久久7777| 91久久精品视频| 久久国产精品久久精品国产| 日日躁夜夜躁狠狠久久AV| 亚洲精品乱码久久久久久蜜桃| 久久精品国产精品青草 | 亚洲∧v久久久无码精品| 久久久久久久综合综合狠狠| 天天综合久久久网| 国产99久久久国产精免费| 久久狠狠色狠狠色综合| 九九久久99综合一区二区| 久久精品国产影库免费看| 欧美va久久久噜噜噜久久| 午夜人妻久久久久久久久| 亚洲国产另类久久久精品黑人| 国产精品久久新婚兰兰| 久久人人爽人人爽人人av东京热 | 乱亲女H秽乱长久久久| 亚洲AV无码久久精品蜜桃| 久久精品国产99久久无毒不卡| 亚洲欧美成人综合久久久|