关于java中ascii转换的问题

rghone 2009-12-18 02:21:47
最近项目中,用到ascii转换,目前的情况是:前127位ascii转成字符没问题,从128位开始,就开始变成?了

比如:十六进制数80,换成ascii是 128,但是java里却成了 -128了,转成字符以后,就和ascii表对不起来了.

我用 string test = char(128),test出来是 ? 。byte(128)也试验了,也不行。

请高手给点意见或者转换方法。在线等!
...全文
1956 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rghone 2010-02-03
  • 打赏
  • 举报
回复
感谢各位的发言,不过qqbz,你这么说的话,那128对应的那个字符与char(81)+ char(82)+ char(88);三个字符加起来相等么?测试出来时“QRX”,明显不相等的。因为对方用c做的,直接一个chr(128)的,所以我这边一直束手无策啊。不过这个项目已经改为Delphi做了。
qqbz 2010-01-10
  • 打赏
  • 举报
回复
这里有一个概念:
ascii码是用来表示字符的,8位表示一个字符,对于英文没有那么多字符,最高位不会用到,就只有127个编码,每个编码对应一个英文字符或不可显示的控制字符(例如回车),而中文以及其他一些语言的话,通常是16位表示(也是8位表示一个,两个合成一个),就会产生大于128的,于是有了扩展的ascii,这些字符显示出来就是乱码。因此可以通过判断字符编码是否大于127来判断是否中英文。

回到楼主的问题上,十六进制的80,十进制就是128,这个128并不是80的ascii,可以查到ascii的128是一个非常奇怪的符号。显示出“?”是对的。
如果楼主想显示“128”本身的ascii码,就不应该认为它是个整数128,应该认为它是三个字符"1","2","8"。楼主可以查到这些字符的ascii分别是"81","82","88".
因此代码看起来应该是:

string test = char(81)+ char(82)+ char(88);
zy88882007 2010-01-09
  • 打赏
  • 举报
回复
java 是unicode编码 前面和ASCII基本一致 后面就不一样了
duoduo_die 2009-12-24
  • 打赏
  • 举报
回复
Ascii码 最早是7位 也就是 16进制 0x00~0x7f 二进制 0000 0000~0111 1111 10进制 0~127
后面又扩展了就是用上了8位 所以是 16进制 0x00~0xff 二进制 0000 0000~1111 1111 10进制 0~255
sxl12396 2009-12-22
  • 打赏
  • 举报
回复
。。。
霜之哀伤 2009-12-22
  • 打赏
  • 举报
回复
ascii码不就是0-127么...
boboo_2000_0 2009-12-22
  • 打赏
  • 举报
回复
这应该是Java本身对字符支持的问题,不知道该怎么解决。
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2009-12-18 02:21
社区公告
暂无公告