• <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>

            逛奔的蝸牛

            我不聰明,但我會(huì)很努力

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

            /* 輸出

            Original:       黃   彪彪

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

            from unicode:   黃   彪彪

            使用命令轉(zhuǎn)換: native2ascii -encoding utf-8 a.txt a.txt

            Java的properties屬性文件會(huì)把字符先轉(zhuǎn)換成unicode的形式存儲(chǔ).

            */


            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

                 *        待轉(zhuǎn)換成Unicode編碼的字符串。

                 * @param escapeSpace

                 *        是否忽略空格,為true時(shí)在空格后面是否加個(gè)反斜杠。

                 * @return 返回轉(zhuǎn)換后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)) {

                                // 每個(gè)unicode有16位,每四位對(duì)應(yīng)的16進(jìn)制從高位保存到低位

                                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 形式的字符串轉(zhuǎn)換成對(duì)應(yīng)的編碼的特殊字符串。 如 "\u9EC4" to "黃".

                 * Converts encoded \\uxxxx to unicode chars

                 * and changes special saved chars to their original forms

                 * 

                 * @param in

                 *        Unicode編碼的字符數(shù)組。

                 * @param off

                 *        轉(zhuǎn)換的起始偏移量。

                 * @param len

                 *        轉(zhuǎn)換的字符長(zhǎng)度。

                 * @param convtBuf

                 *        轉(zhuǎn)換的緩存字符數(shù)組。

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

                 */

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

                    char aChar;

                    char[] out = new char[len]; // 只短不長(zhǎng)

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

            評(píng)論

            # re: Java:轉(zhuǎn)換漢字為unicode形式的字符串和轉(zhuǎn)換unicode形式字符串轉(zhuǎn)換成漢字 2013-07-04 10:52 jd
            jd?  回復(fù)  更多評(píng)論
              

            国产精品久久久久久影院| 色综合久久天天综线观看| 亚洲色欲久久久久综合网| 日韩精品久久久久久| 日韩人妻无码精品久久免费一| 久久亚洲精品国产精品婷婷| 久久久久久久久久久免费精品| 久久se精品一区精品二区国产| 久久精品免费观看| 国内精品伊人久久久久影院对白| 久久精品国产91久久麻豆自制| 久久国产精品-国产精品| yellow中文字幕久久网| 国产精品无码久久四虎| 色8激情欧美成人久久综合电| 无码任你躁久久久久久| 伊人久久大香线蕉综合Av| 亚洲av日韩精品久久久久久a | 色青青草原桃花久久综合| 香蕉久久夜色精品国产2020| 亚洲欧美成人综合久久久| 久久―日本道色综合久久| 国产免费久久精品丫丫| 超级97碰碰碰碰久久久久最新| 久久亚洲精品无码aⅴ大香| 国产69精品久久久久久人妻精品| 久久青青草原精品国产| 人妻无码αv中文字幕久久琪琪布| 久久伊人五月丁香狠狠色| 久久精品国产精品亚洲精品| 一本大道久久香蕉成人网 | 亚洲精品无码久久久久久| 国产精品久久亚洲不卡动漫| 久久精品成人欧美大片| 狠狠色丁香久久婷婷综合| 久久福利青草精品资源站| 无码国内精品久久综合88| 青青草国产精品久久久久| 天天爽天天狠久久久综合麻豆| 国产成人精品久久综合| 久久99精品久久久久久久不卡|