Java實(shí)現(xiàn)中文字符串與unicode互轉(zhuǎn)工具類
本文實(shí)例為大家分享了Java實(shí)現(xiàn)中文字符串與unicode互轉(zhuǎn)的具體代碼,供大家參考,具體內(nèi)容如下
原理利用了java實(shí)現(xiàn)js的escape以及unescape函數(shù)。
/**
* 中文字符串和unicode互轉(zhuǎn)工具類 <br>
*
* @author hkb <br>
*/
public class UnicodeConvertUtils {
/**
* 實(shí)現(xiàn)js的escape函數(shù)
*
* @param input
* 待傳入字符串
* @return
*/
public static String escape(String input) {
int len = input.length();
int i;
char j;
StringBuffer result = new StringBuffer();
result.ensureCapacity(len * 6);
for (i = 0; i < len; i++) {
j = input.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) {
result.append(j);
} else if (j < 256) {
result.append("%");
if (j < 16) {
result.append("0");
}
result.append(Integer.toString(j, 16));
} else {
result.append("%u");
result.append(Integer.toString(j, 16));
}
}
return result.toString();
}
/**
* 實(shí)現(xiàn)js的unescape函數(shù)
*
* @param input
* 待傳入字符串
* @return
*/
public static String unescape(String input) {
int len = input.length();
StringBuffer result = new StringBuffer();
result.ensureCapacity(len);
int lastPos = 0, pos = 0;
char ch;
while (lastPos < len) {
pos = input.indexOf("%", lastPos);
if (pos == lastPos) {
if (input.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(input.substring(pos + 2, pos + 6), 16);
result.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(input.substring(pos + 1, pos + 3), 16);
result.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
result.append(input.substring(lastPos));
lastPos = len;
} else {
result.append(input.substring(lastPos, pos));
lastPos = pos;
}
}
}
return result.toString();
}
/**
* unicode轉(zhuǎn)中文
*
* @param input
* 待傳入字符串
* @return
*/
public static String toGb2312(String input) {
input = input.trim().replaceAll("(?i)\\\\u", "%u");
return unescape(input);
}
/**
* 中文字符串轉(zhuǎn)unicode
*
* @param input
* 待傳入字符串
* @return
*/
public static String toUnicode(String input) {
input = input.trim();
String output = escape(input).toLowerCase().replace("%u", "\\u");
return output.replaceAll("(?i)%7b", "{").replaceAll("(?i)%7d", "}").replaceAll("(?i)%3a", ":")
.replaceAll("(?i)%2c", ",").replaceAll("(?i)%27", "'").replaceAll("(?i)%22", "\"")
.replaceAll("(?i)%5b", "[").replaceAll("(?i)%5d", "]").replaceAll("(?i)%3D", "=")
.replaceAll("(?i)%20", " ").replaceAll("(?i)%3E", ">").replaceAll("(?i)%3C", "<")
.replaceAll("(?i)%3F", "?").replaceAll("(?i)%5c", "\\");
}
/**
* 測(cè)試
*
* @param args
*/
public static void main(String[] args) {
System.out.println(toUnicode("你好"));
System.out.println(toGb2312("\u4f60\u597d"));
// 等同于上面
System.out.println(toGb2312("\\u4f60\\u597d"));
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程編程實(shí)現(xiàn)socket通信示例代碼
這篇文章主要介紹了Java多線程編程實(shí)現(xiàn)socket通信示例代碼,詳細(xì)介紹了tcp、udp協(xié)議,以及基于socket的Java網(wǎng)絡(luò)編程的相關(guān)內(nèi)容及代碼示例,代碼測(cè)試可用,供大家參考。2017-10-10
使用gRPC微服務(wù)的內(nèi)部通信優(yōu)化
這篇文章主要為大家介紹了微服務(wù)優(yōu)化之使用gRPC做微服務(wù)的內(nèi)部通信,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
使用Spring的AbstractRoutingDataSource實(shí)現(xiàn)多數(shù)據(jù)源切換示例
這篇文章主要介紹了使用Spring的AbstractRoutingDataSource實(shí)現(xiàn)多數(shù)據(jù)源切換示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
解決Springboot @WebFilter攔截器未生效問題
這篇文章主要介紹了解決Springboot @WebFilter攔截器未生效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
教你Springboot如何實(shí)現(xiàn)圖片上傳
這篇文章主要介紹了教你Springboot如何實(shí)現(xiàn)圖片上傳,首先大家明白圖片上傳,需要在數(shù)據(jù)庫定義一個(gè)varchar類型的img字段圖片字段,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
Java Set接口及常用實(shí)現(xiàn)類總結(jié)
Collection的另一個(gè)子接口就是Set,他并沒有我們List常用,并且自身也沒有一些額外的方法,全是繼承自Collection中的,因此我們還是簡單總結(jié)一下,包括他的常用實(shí)現(xiàn)類HashSet、LinkedHashSet、TreeSet的總結(jié)2023-01-01
詳解Idea中HTTP Client請(qǐng)求測(cè)試工具的使用
今天抽空給大家分享Idea中HTTP Client請(qǐng)求測(cè)試工具的使用,小編在這建議使用HTTP Client的Idea版本最好在2018以上,不然的話體驗(yàn)不是多好,今天就給大家介紹Idea中HTTP Client怎么使用的,感興趣的朋友跟隨小編一起看看吧2021-05-05
java常見報(bào)錯(cuò)及解決方案總結(jié)
這篇文章主要介紹了Java編程中常見錯(cuò)誤類型及示例,包括語法錯(cuò)誤、空指針異常、數(shù)組下標(biāo)越界、類型轉(zhuǎn)換異常、文件未找到異常、除以零異常、非法線程操作異常、方法未定義異常、死鎖和類未找到異常,文中通過代碼將解決方案介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03

