java对字符串unicode_java实现unicode与字符串互转

/**

* unicode转字符串

* @param unicodeStr unicode

* @return 字符串

*/

public static String unicodeToString(String unicodeStr) {

// XDigit是POSIX字符类,表示十六进制数字,\p{XDigit}等价于[a-fA-F0-9]

// pattern用于匹配形如\\u6211的字符串

Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");

Matcher matcher = pattern.matcher(unicodeStr);

char ch;

while (matcher.find()) {

// 捕获组按开括号'('从左到右编号(从1开始),以(A(B(C)))为例,group(1)表示(A(B(C)),group(2)表示(B(C)),group(3)表示(C)

// group(2)表示第二个捕获组,即(\p{XDigit}{4})

// Integer.parseInt(str, 16)把16进制的数字字符串转化为10进制,比如Integer.parseInt("16", 16) = 22

ch = (char) Integer.parseInt(matcher.group(2), 16);

// 把第一个捕获组,即形如\\u6211这样的字符串替换成中文

unicodeStr = unicodeStr.replace(matcher.group(1), ch + "");

}

return unicodeStr;

}

/**

* 字符串转unicode

* @param str 字符串

* @return unicode

*/

public static String stringToUnicode(String str) {

StringBuffer sb = new StringBuffer();

char[] c = str.toCharArray();

for (int i = 0; i < c.length; i++) {

// Integer.toHexString把字符串转16进制

sb.append("\\u" + Integer.toHexString(c[i]));

}

return sb.toString();

}

使用示例

@Test

public void test1() throws Exception {

String str = "今天天气真好";

String stringToUnicode = stringToUnicode(str);

String unicodeToString = unicodeToString(stringToUnicode);

System.out.println(stringToUnicode);

System.out.println(unicodeToString);

}

输出结果

\u4eca\u5929\u5929\u6c14\u771f\u597d

今天天气真好

附录

POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准,其目标是提供一套大体上基于Unix的可移植操作系统标准。

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A-Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

以下是使用java中的正则表达式匹配POSIX字符类的各种示例。

编号

构造

匹配描述

1

\p{Lower}

小写字母字符:[a-z]。

2

\p{Upper}

大写字母字符:[A-Z]。

3

\p{ASCII}

所有ASCII:[\x00-\x7F]。

4

\p{Alpha}

字母字符:[\p{Lower}\p{Upper}]。

5

\p{Digit}

十进制数字:[0-9]。

6

\p{Alnum}

字母数字字符:[\p{Alpha}\p{Digit}]。

7

\p{Punct}

标点符号:!”#$%&’()*+,-./:;<=>?@[]^_>{Ι}< 其中一个。

8

\p{Graph}

一个可视的字符: [\p{Alnum}\p{Punct}]。

9

\p{Print}

可打印字符:[\p{Graph}\x20]。

10

\p{Blank}

空格或制表符:[ \t]。

11

\p{XDigit}

十六进制数字:[0-9a-fA-F]。

12

\p{Space}

空白字符:[ \t\n\x0B\f\r]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值