如何处理字符当中包含UTF-8编码的中文

kimsung 2014-02-14 05:39:42
原字符串是 "快乐的中国人"
如何转成"快乐的中国人"
...全文
295 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kimsung 2014-04-01
  • 打赏
  • 举报
回复
谢谢各位.. 最终是用的apache的common包. 因为项目其他地方也一直用这个包. System.out.println(org.apache.commons.lang.StringEscapeUtils.StringEscapeUtils.unescapeHtml("快乐的中国人"));
代码间的舞者 2014-02-18
  • 打赏
  • 举报
回复
哈!unicode码和汉字的转换!学习了!
huntor 2014-02-17
  • 打赏
  • 举报
回复
char 乐 = 20048;
ghostkngiht 2014-02-17
  • 打赏
  • 举报
回复

        StringBuilder rs = new StringBuilder();
        String str = "快乐的中国人";
        Pattern p = Pattern.compile("&#\\d{5};");
        Matcher m = p.matcher(str);
        int index = 0;
        while (m.find()) {
            rs.append(str.substring(index, m.start()));
            String g = m.group();
            int d = Integer.parseInt(g.substring(2, g.length() - 1));
            rs.append(new String(new byte[]{(byte) (d / 256), (byte) (d % 256)}, "utf-16"));
            index = m.end();
        }
        rs.append(str.substring(index));
        System.out.println(rs);
debugmoney 2014-02-15
  • 打赏
  • 举报
回复
判断一下那些是中文,去除不是的就好了就好了呗,具体什么编码 你去看实际情况 转一下就好了

 public class StringUtilTest
{
	 public static boolean isChinese(char c) {  
		  
	        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);  
	  
	        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS  
	  
	                || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS  
	  
	                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A  
	  
	                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION  
	  
	                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION  
	  
	                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {  
	  
	            return true;  
	  
	        }  
	  
	        return false;  
	  
	    }  
	  
	 public static String getChineseFromStr(String strName) {  
	  
	        char[] ch = strName.toCharArray();  
	        String result = "";
	        for (int i = 0; i < ch.length; i++) {  
	  
	            char c = ch[i];  
	  
	            //如果有一个非中文,则返回错误
	            if (isChinese(c) == true) {  
	 
	                result += c; 
	            }  
	        } 
	        return result;
	    }
	public static void main(String[] args) 
	    {
			
			System.out.println(getChineseFromStr("快乐的中国人"));
		}
}
结果输出:快的中国人
nmyangym 2014-02-15
  • 打赏
  • 举报
回复
引用 2 楼 huntor 的回复:
这个是Unicode字符实体引用。不是UTF-8编码
楼主参考:

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ChangeUnicodeString {
	public static void main(String[] args) {
		String s = "快乐的中国人";
		String resultString = getNewString(s);
		System.out.println("original sting is " + s);
		System.out.println("after changing it is " + resultString);
	}

	/**
	 * 把含有unicode编码的字符串转成汉字。
	 * @param s
	 * @return 转换后的字符串。
	 */
	public static String getNewString(String s) {
		//----------------- 定义正则匹配模式。
		String regexString = "&#\\d{1,5};";// 代表unicode字符串 的正则表达式。
		Pattern pattern = Pattern.compile(regexString);
		Matcher matcher = pattern.matcher(s);

		List<int[]> list = new ArrayList<int[]>();// 用于保存所有这种字符串的首位位置。
		// ----------------- 遍历字符串,确定所有的unicode字串的位置,以整数数组形式放入List里。
		while (matcher.find()) {
			int[] intPosition = new int[2];// 记录起始及结束位置。
			intPosition[0] = matcher.start();
			intPosition[1] = matcher.end();
			list.add(intPosition);
		}
		// ----------------- 开始转换
		String result = "";// 保村最终结果。
		int endP = s.length();
		for (int i = list.size() - 1; i >= 0; i--) {// 循环替换所有的unicode 字符串为汉字。

			int[] intP = list.get(i);
			String temp = s.substring(intP[0], intP[1]);
			String temp1 = s.substring(intP[1], endP);
			String change = "";
			change = changeString(temp);// 调用方法把"乐" 转换成 "乐"....
			result = change + temp1 + result;// 形成新的字符串。
			endP = intP[0];
		}
		result = s.subSequence(0, endP) + result;
		return result;
	}

	/**
	 * 把类似 "乐"字符串, 转换成 "乐"等汉字形式。
	 * 
	 * @param toBechanged
	 * @return 转换后的字符串。
	 */
	public static String changeString(String toBechanged) {
		String result = null;
		String s1 = toBechanged.substring(2, toBechanged.length() - 1);// 去掉"&#"和";";
		int intS1 = Integer.parseInt(s1);// 转成整数
		// ----------- 把这个代表一个unicode 字符的整数,放入一个长度为2的字节数组。
		byte[] b = new byte[2];
		b[1] = (byte) (intS1 & 0xff);
		b[0] = (byte) ((intS1 >>> 8) & 0xff);
		try {
			result = new String(b, "unicode");// 形成字符串。
		} catch (UnsupportedEncodingException uee) {
			uee.printStackTrace();
		}
		return result;
	}
}
huntor 2014-02-15
  • 打赏
  • 举报
回复
这个是Unicode字符实体引用。不是UTF-8编码

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧