Unicode編碼和中文互轉(JAVA實現)

rodertW發表於2019-01-21
	/**
	 * 獲取字串的unicode編碼 漢字“木”的Unicode 碼點為Ox6728
	 *
	 * @param s
	 *            木
	 * @return \ufeff\u6728 \ufeff控制字元 用來表示「位元組次序標記(Byte Order Mark)」不佔用寬度
	 *         在java中一個char是採用unicode儲存的 佔用2個位元組 比如 漢字木 就是 Ox6728
	 *         4bit+4bit+4bit+4bit=2位元組
	 */
	public static String stringToUnicode(String s) {
		try {
			StringBuffer out = new StringBuffer("");
			// 直接獲取字串的unicode二進位制
			byte[] bytes = s.getBytes("unicode");
			// 然後將其byte轉換成對應的16進製表示即可
			for (int i = 0; i < bytes.length - 1; i += 2) {
				out.append("\\u");
				String str = Integer.toHexString(bytes[i + 1] & 0xff);
				for (int j = str.length(); j < 2; j++) {
					out.append("0");
				}
				String str1 = Integer.toHexString(bytes[i] & 0xff);
				out.append(str1);
				out.append(str);
			}
			return out.toString();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}
	/**
	 * Unicode轉 漢字字串
	 *
	 * @param str
	 *            \u6728
	 * @return '木' 26408
	 */
	public static String unicodeToString(String str) {

		Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
		Matcher matcher = pattern.matcher(str);
		char ch;
		while (matcher.find()) {
			// group 6728
			String group = matcher.group(2);
			// ch:'木' 26408
			ch = (char) Integer.parseInt(group, 16);
			// group1 \u6728
			String group1 = matcher.group(1);
			str = str.replace(group1, ch + "");
		}
		return str;
	}

 

 

相關文章