如何判断块中是unicode还是ascii?欢迎讨论,帮顶给分!!! 嗯……啊……我可不可以问个很简单的问题~~不要拿鸡蛋丢我……请问:什么是unicode ??……………… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 统一码(Unicode)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 如果有大于0x80的则表示是Unicode 楼主,你可以看看Properties类的saveConvert()方法的源代码,我想会对你有用 帮你顶ztJava中文处理学习笔记——Hello Unicodehttp://www.chedong.com/tech/hello_unicode.html 我是楼主,谢谢各位。再明确一下,上面说的存储格式,如果是unicode,那么要按照高8位在后,低8位在前的规则存入块中。 楼主的问题太搞笑了一个byte是8 bit,说白了你就是想从一个512 * 8的bit stream里去判断到底我该用8bit呢,还是16bit,蛇头咬了蛇尾..........道亦道,道亦非道......逻辑上就是错误的,措辞强硬了点,抱歉 应该用 stonegump(龙飞虎) 的方法就行了 去判断到底我该用8bit呢,还是16bit楼主,你事先都知道是不是unicode了,还判断什么呢,自己判断自己知道的事情 另外,按照stonegump(龙飞虎) 的方法也未必可行。举个例子:“学”的unicode是\u5B66 ,他存在上述块中应该是… 66 5B …,那么两个字节都没有超过0x80,按照stonegump(龙飞虎)的方法,66 5B会被解码成f[ 。实际上超过0x80则为unicode这一规则是用在utf-8编码中的,这里不适合。 我想问楼主,‘A’这个字符你说是Ascii还是Uncode? 楼上,是这样的:'A'在存入上述块结构时要根据情况来定是采用单字节还是双字节。如果'A'字符往后的511个字符全部都是英文字母和符号,那么在存入时采用单字节即41。如果其后包含1个双字节的符号(例如汉字),哪怕只有一个,那么'A'在存入块时也使用双字节,即 41 00。因此在读取这些信息时就出现了上面提到的问题。 保存为Unicode格式再用UE看一看就知道了 你事先不知道这个bit stream是什么编码.....如果有两串字符,用unicode和ascii编码出来结果相同,如何知道是何种编码;再说了,如何知道一串bit stream一定是unicode和ascii中的一种??如果观点成立,那就是说给我一串bit stream,不管是什么编码的,我都能知道,而不仅仅对于unicode和ASCII,是这样吗??毕竟不仅这两种编码而已 问题已经解决,通过将所有512个字节的值与0x80对比判断该块是使用的单字节编码还是双字节。如果有1个字节的值大于0x80,则说明肯定有一个字符是双字节字符,那么按照上面的叙述的规则,如果存在一个双字节字符,则该字符所在块全部采用双字节存放,因此该块按照双字节解码;反之,如果所有512字节的值都小于0x80,则采用单字节解码。另外,楼上兄弟,脱离了实际环境的假设毫无意义,不要为畏惧困难而费劲心力地找出天大的借口,找出规律想出办法解决问题才是关键所在。谨记!感谢所有跟贴的弟兄,明日结贴。 你都假设了里面一定存在大于ASCII范围的字存在嘛,换句话说,你还是事先知道这个要么是ASCII或者UNICODE了,而且里面一定要存在有超过ASCII范围的字存在;如果没有大于0x80的字节,也不代表就是ASCII,对吧;我只是想说,从bit stream去判断编码从逻辑上是反的,如果你能保证一定有其他文字存在当然也可以解决,但只是特殊情况下的特殊手段;如果遇到的是ASCII范围内的字用UNICODE编码,这个方法就出错了... 何况你遇到两个小于0x80的byte也不代表他们不是unicode, 0x55 0x55合起来是21845,足够用来表示一个中文了吧!可是它们没有一个大于0x80,unix里早就有判断一串字符是否unicode的方法了,用到统计和猜测等各种方法,但是还是非科学的,不能保证一定判断正确,你判断是否大于0x80和UNIX实现的方法比起来太小儿科了 起码这种方法是不行的,unix的方法比这个保险,但是还是非科学的....成功率高一些而已..... 可惜还是有人被误导,认为超过128的"一个"byte"就是unicode,快结帖吧 多谢你提出“宝贵”意见,你能拿出个所谓very科学的判别方法吗?如果有,我另开200分贴送你。没有的话我还要解决实际问题,总不能等到你这所谓very科学的的方法出来后我再编?所以你还是恭喜我解决了问题才是,这样才对的住你那所得的1分。嘿嘿~ 当jtable的某单元格双击处于编辑状态(答到边的都有分) 关于获取一个对象的值的问题。 jdbTable1.setModel 从远程路径上读写图片文件,出现掉色现象,如何解决? java如何取得7天前的系统时间? 关于Struts中文件标签问题!!!! 怎样使对话框右上角的关闭按钮,最大化按钮无效(即屏蔽这两个按钮) 请解释一下这个程序 RMI定位服务器对象的问题: EJB3.0+JBOSS7.1,客户端局域网内调用EJB出错 java游戏编程前景怎么样啊? 一个菜鸟问题
http://www.chedong.com/tech/hello_unicode.html
再明确一下,上面说的存储格式,如果是unicode,那么要按照高8位在后,低8位在前的规则存入块中。
“学”的unicode是\u5B66 ,他存在上述块中应该是… 66 5B …,那么两个字节都没有超过0x80,按照stonegump(龙飞虎)的方法,66 5B会被解码成f[ 。
实际上超过0x80则为unicode这一规则是用在utf-8编码中的,这里不适合。
'A'在存入上述块结构时要根据情况来定是采用单字节还是双字节。如果'A'字符往后的511个字符全部都是英文字母和符号,那么在存入时采用单字节即41。如果其后包含1个双字节的符号(例如汉字),哪怕只有一个,那么'A'在存入块时也使用双字节,即 41 00。
因此在读取这些信息时就出现了上面提到的问题。
再用UE看一看就知道了