欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

unicode 解码

程序员文章站 2022-07-05 16:28:44
...

1,如何把Unicode转化为正常字符呢?

/**
	 * 把unicode转化为中文
	 * @param str
	 * @return
	 */
	public static String unicodeToChinese(String str) {
		if (IsChineseUtil.isHasChinses2(str))//判断是否有中文字符
			return str;
		if (str.indexOf("\\u") == -1 || str == null || "".equals(str.trim())) {/*若不是unicode,则直接返回*/
			return str.replaceAll("\\\\ ", " ");//删掉英文中的\,such as "default\ value1"
			/* 主要是针对 zk 中的国际化问题 */
		}
		StringBuffer sb = new StringBuffer();
		if(!str.startsWith("\\u")){/*若开头不是unicode,如“abc\u4e2d\u56fd” */
			int index=str.indexOf("\\u");
			sb.append(str.substring(0, index));
			str=str.substring(index);
		}
		if (str.endsWith(":")) /*如“\u4e2d\u56fd:” */{
			str = str.substring(0, str.length() - 1);
		}
		String[] chs = str.trim().split("\\\\u");
		
		for (int i = 0; i < chs.length; i++) {
			String ch = chs[i].trim();
			if (ch != null && !"".equals(ch)) {
				int length_ch=ch.length();
				if(length_ch>4){
					length_ch=4;
				}//中文的长度是4,英文的长度是2
				sb.append((char) Integer.parseInt(ch.substring(0, length_ch), 16));//按照十六进制解析
				if (ch.length() > 4) {
					sb.append(ch.substring(4));
				}
			}
		}
		return sb.toString();
	}

应用:

selectContent=Conversion.unicodeToChinese(selectContent);

  

 依赖的方法:

    public static boolean isHasChinses2(String str)
    {
        String encodeName = "UTF-8";
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++)
        {
            try
            {
                char c = chars[i];
                int leng = getEncodeLength(c, encodeName);
                //                System.out.println(singleStr + "\t" + leng);
                if (leng == 9)//表示是中文字符
                {
//                    System.out.println("有中文");
                    return true;
                }
            }
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            }
            catch (MyException e)
            {
                e.printStackTrace();
            }
        }
        return false;
    }

    public static int getEncodeLength(String str, String encodeName)
            throws MyException, UnsupportedEncodingException
    {//返回值为9 的话,则说明有中文。
        if (str.length() != 1)
        {
            throw new MyException("超过一个字符");
        }
        String encod = URLEncoder.encode(str, "UTF-8");
        return encod.length();
    }

    public static int getEncodeLength(char c, String encodeName)
            throws MyException, UnsupportedEncodingException
    {//返回值为9 的话,则说明有中文。
        return getEncodeLength(String.valueOf(c), encodeName);
    }