String tmp = "我"; // 我这个 "我" 字,经常某种编码后,,变成了上面那个字符串,,,
这中间,我不知道,别人是怎么编码的..我现在要把它还原成中文!!!
这中间,我不知道,别人是怎么编码的..我现在要把它还原成中文!!!
解决方案 »
- java socket通讯问题!急啊!!!!
- 谁有关于 流程结构 的学习或训练软件 提供几个
- 请问这个for循环怎样优化(提高效率)?
- 怎样用JAVA写网络连接的接口 循环输入用户名和密码
- 在servlet中查询数据库得到一个数据集,怎么样将该数据集打包为一个XML文件传递给调用servlet的客户端??
- 谁能使用JAVA翻译下列C代码?
- 初学JAVA 请教一个问题, 这程序如何能看到运行结果啊!
- 哪里有《JavaTM 实例技术手册》一书的电子版啊?
- 访问权限
- 大家帮个忙,请问登录页面的用户名和密码如何同数据库的密码相判断??
- [讨论]判断是否回文,忽略标点和空格部分怎么写?
- 请教一个修改方法名称的问题。
byte data [] = {(byte)230,(byte)136,(byte)145};
String ch = new String(data,"UTF-8"); // 还原成了 "我";我现在通过这种方式,,还原了..
不过,不知道原因,,是怎么样将一个Unicode的码的中文,,拆成三个这样的数字...
又通过这种方式,还原成了中文...期待高人解释....
utf的格式是 “e69687”其中是3个字符的16进制的编码
而每一个char对应两位字节的utf编码,把3个字符拆分出来,求出每个char的对应的10进制的编码,我想就是楼主看到的样子了
System.out.println(new String(bb,"UTF-8"));
for(int i = 0 ; i<3 ;i++) {
System.out.println(bb[i]+256);
} 还原
这个,跟楼上的,三个字节中的数字,有什么联系???
230
136
145
你运行下面的程序就得到上面的字节
char c = (char)0x6211 ; b1 = (byte) ((c >> 12 & 0x0F | 0xE0)+256);
b2 = (byte) ((c >> 6 & 0x3F | 0x80)+256);
b3 = (byte) ((c >> 0 & 0x3F | 0x80)+256);
System.out.println(b1+256);
System.out.println(b2+256);
System.out.println(b3+256);
0000 – 007F 0xxxxxxx
0080 – 07FF 110xxxxx10xxxxxx
0800 – FFFF 1110xxxx10xxxxxx10xxxxxx对于“我”这个字符为 0x6211 正好是上面的第三种情况,把0x6211写成二进制,按照上面的模板依次填入x代表的位置,就出来这三个数字了建议查看编码有关的文章
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
正常应该是这样的只是1 -- 3字节在我们的使用范围内多一点还是有可能出现四个字节的
贴出来 大家 看看 一起学习吧