unicode码 java中文
来源:互联网 发布:稀疏矩阵的压缩方法 编辑:程序博客网 时间:2024/05/22 10:23
最近做项目,要把unicode转为中文,但是本身取出来的时候unicode码已经被转为“\\u6211”了,无法用java默认的转码来转换了。
自己写了一个转换器,根据unicode转码的规律,之后遇到了不少麻烦,例如如果以“\\u”开头但是根本不是unicode码、末尾以“\\”结尾啊什么的。目前是把程序完成为能想到的出错的可能性都覆盖了,以后再碰到再修改。
- public class UnicodeDecoder {
- public static void main(String[] args) {
- String s = "\\\u6211\\uadsf\\t\\u7231\u5317\\u4EAC\u5929\\u5B\t89\\\t\u95E8\\\"\\u12";
- System.out.println(decode(s));
- }
- public static String decode(String in) {
- try {
- return decode(in.toCharArray());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return in;
- }
- private static String decode(char[] in) throws Exception {
- int off = 0;
- char c;
- char[] out = new char[in.length];
- int outLen = 0;
- while (off < in.length) {
- c = in[off++];
- if (c == '\\') {
- if (in.length > off) { // 是否有下一个字符
- c = in[off++]; // 取出下一个字符
- } else {
- out[outLen++] = '\\'; // 末字符为'\',返回
- break;
- }
- if (c == 'u') { // 如果是"\\u"
- int value = 0;
- if (in.length > off + 4) { // 判断"\\u"后边是否有四个字符
- boolean isUnicode = true;
- for (int i = 0; i < 4; i++) { // 遍历四个字符
- c = in[off++];
- switch (c) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- value = (value << 4) + c - '0';
- break;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- value = (value << 4) + 10 + c - 'a';
- break;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- value = (value << 4) + 10 + c - 'A';
- break;
- default:
- isUnicode = false; // 判断是否为unicode码
- }
- }
- if (isUnicode) { // 是unicode码转换为字符
- out[outLen++] = (char) value;
- } else { // 不是unicode码把"\\uXXXX"填入返回值
- off = off - 4;
- out[outLen++] = '\\';
- out[outLen++] = 'u';
- out[outLen++] = in[off++];
- }
- } else { // 不够四个字符则把"\\u"放入返回结果并继续
- out[outLen++] = '\\';
- out[outLen++] = 'u';
- continue;
- }
- } else {
- switch (c) { // 判断"\\"后边是否接特殊字符,回车,tab一类的
- case 't':
- c = '\t';
- out[outLen++] = c;
- break;
- case 'r':
- c = '\r';
- out[outLen++] = c;
- break;
- case 'n':
- c = '\n';
- out[outLen++] = c;
- break;
- case 'f':
- c = '\f';
- out[outLen++] = c;
- break;
- default:
- out[outLen++] = '\\';
- out[outLen++] = c;
- break;
- }
- }
- } else {
- out[outLen++] = (char) c;
- }
- }
- return new String(out, 0, outLen);
- }
- }
0 0
- unicode码 java中文
- java中文转unicode码
- java中文转unicode码
- Java中文转Unicode码
- java 中文和Unicode码 互相转换
- Java实现Unicode码转为中文
- java将unicode码转换为中文
- JAVA UNICODE转中文
- Java unicode 转中文
- 中文转换Unicode码
- 中文标点符号unicode码
- 中文标点符号unicode码
- 中文转码unicode
- java Unicode与中文互换
- java Unicode与中文互换
- Java 中文 Unicode 编码转换
- Java 中文 Unicode 编码转换
- java中文与unicode互转
- C#中生成Word并写入数据
- Android在OnCreate中获取控件的宽度和高度的实现代码
- resin3.1.3相比于resin3.0的变化
- Ztree 异步加载 的初步研究
- 习近平 李克强就韩国客轮沉没事故向韩方致慰问电
- unicode码 java中文
- iOS开发之八:UISlider、UISegmentedControl、UIPageControl的使用
- 黑马程序员-OC中字符串的操作-NSString+NSMutableString+NSValue+NSAraay用法汇总
- 算法 - 求一个数组的最长递减子序列(C++)
- 文件I/O(1)
- 当Windows 7或者Windows2008加入域后,登陆时出现“服务器上的安全数据库没有此工作站信任关系的计算机帐户”,导致无法登陆到域
- 用netinstall安装RouterOS教程
- NC(Net cat ) 使用详解(用作文件传输,端口转发,反弹Shell)
- resin3使用的一些体会