VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 745|回复: 8

求救:关于编码问题

[复制链接]

1

主题

11

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-2-3 17:00:01 | 显示全部楼层 |阅读模式
例如现在有个"测"字 它的UNICODE的ASCII码为27979  16进制ASCII码为6D4B

现在要转化为GBK内码,也就是要得到"测"字的GBK的ASCII码:45794,然后我把他转换成16进制。。。问大家的就是如何得到汉字的GBK内码的ASCII码?

谢谢了
回复

使用道具 举报

1

主题

21

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-3-22 18:45:01 | 显示全部楼层
                char a='测';
                System.out.println(Integer.toHexString(((int)a)));
                System.out.println((int)a);
                byte[] b=new String("测").getBytes("gbk");
                int i=b[1]<<4;
                i=i|b[0];
                a=(char)i;
                System.out.println(Integer.toHexString(((int)a)));
                System.out.println((int)a);
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-3-23 14:45:01 | 显示全部楼层
慢了一拍,
在String.getBytes的时候好像是会抛出UnsupportedEncodingException异常。
回复

使用道具 举报

1

主题

11

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
 楼主| 发表于 2020-3-24 14:45:01 | 显示全部楼层
to zzzdsd

不能实现啊,兄弟
回复

使用道具 举报

1

主题

21

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-4-1 14:15:01 | 显示全部楼层
呵呵 我也觉得不对 超过字符集范围了 没闷过去

重写了个

        public static String getGBK(String a) throws UnsupportedEncodingException{
             byte[] b=new String(a).getBytes("gbk");
             String b1=Integer.toString((char)b[0],16).toUpperCase();
             String b2=Integer.toString((char)b[1],16).toUpperCase();
             return b1.substring(2,4)+b2.substring(2, 4);
     }
     public static int getGBKINT(String a) throws UnsupportedEncodingException{
             String tmp=getGBK(a);
             return Integer.parseInt(tmp, 16);
     }

测试
                String a="测";
                System.out.println(getGBK(a));
                System.out.println(getGBKINT(a));
回复

使用道具 举报

1

主题

21

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-4-14 11:15:01 | 显示全部楼层
终于知道我第一种写法那里错了,位数和高地位搞错了
                  char aa = '测';
                byte[] b = new String("测").getBytes("gbk");
                int high = b[0] << 8 & 0xFFFFFF00;
                int low = b[1]&0xFFFF00FF;
                int gbk = (high | low) & 0x0000FFFF;
                System.out.println(Integer.toHexString((gbk)));
                System.out.println(gbk);

回复

使用道具 举报

1

主题

21

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-4-14 12:15:01 | 显示全部楼层
char aa = '测';
                byte[] b = new String("测").getBytes("gbk");
                int high = b[0] << 8 & 0xFFFFFF00;
                int low = b[1]&0xFFFF00FF;
                int gbk = (high | low) & 0x0000FFFF;
                System.out.println(Integer.toHexString((gbk)));
                System.out.println(gbk);
回复

使用道具 举报

1

主题

11

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
 楼主| 发表于 2020-4-16 21:00:02 | 显示全部楼层
反过来解码就没这么简单喽。。
回复

使用道具 举报

1

主题

21

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-4-16 23:15:01 | 显示全部楼层
是的getbyte功能其实很强大
不过反过来也一样,主要是需要查资料,查unicode和gbk对应的区域
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表