CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

求助]一个包含中英文的字符串转换成字节数组后,怎样保证拆分的时候不出现把汉字从中间分开而出现乱码?

楼主godfox(龙在天涯)2003-09-04 10:58:01 在 Java / Web 开发 提问

[求助]一个包含中英文的字符串转换成字节数组后,怎样保证拆分的时候不出现把汉字从中间分开而出现乱码?  
  而且,我想从这个字节数组里,截取任意的一段。  
  比如说:  
  String   s   =   new   String("我想从sdf这个字sdfsaf节数sdafasd组里,截取sdf任意的段");  
  byte   []   sbyt   =   s.getByte();  
  我想取得,字符串的前20个字节!如何取得啊?  
  有没有好的方法呢!!!!??  
  急急急急!!!!!!!!!!!! 问题点数:0、回复次数:10Top

1 楼betterjonah(codes)回复于 2003-09-04 12:42:01 得分 0

判断第20个字节的码值是否大于08xb,如果是说明汉字被切分了。  
  Top

2 楼godfox(龙在天涯)回复于 2003-09-04 13:31:25 得分 0

我想问一下,”08xb“,为什么,大于它就说明汉字被拆分了!!??  
  Top

3 楼liuyi8903(不让疑问伴随)回复于 2003-09-04 13:39:36 得分 0

在Java中永远不会出现这种情况!  
  Java用的是Uncode码!你用Byte[]初始化一个gb2312的字符串。  
  Top

4 楼godfox(龙在天涯)回复于 2003-09-04 14:03:13 得分 0

而且,我不知道“20个字节的码值”如何取得啊?Top

5 楼ticlej(ticlej)回复于 2003-09-04 15:00:01 得分 0

你看看汉字编码吧,一般来说汉字编码是由两个字节组成的,第一个字节是从128-155的,也就是说十六进制的08;而ascII   码则为0-127;Top

6 楼pnileotgx(tianlai)回复于 2003-09-04 15:12:24 得分 0

用循环去取不就ok了吗?  
  for   (int   i=0,i<sbyt.length;i++)    
  if   (i==19)   return   sbyt[i];Top

7 楼godfox(龙在天涯)回复于 2003-09-04 15:27:56 得分 0

能不能,举一个简单的例子呢!Top

8 楼betterjonah(codes)回复于 2003-09-04 16:01:23 得分 0

准确地说,大于08xb不能保证是汉字,大可以保证一定是亚洲字符,如,日文,韩文。  
  String   str   =   "woshi中国人wozihao!"  
  至于取得方法,pnileotgx(tianlai)   的方法就可以阿  
  Top

9 楼godfox(龙在天涯)回复于 2003-09-04 16:41:07 得分 0

我发现,用pnileotgx(tianlai)   的方法:  
  ——————————————————————————————  
  public   class   bytetest    
  {  
  public   static   void   main(String[]   args)    
  {  
  String   s   =   "离开abc";  
  byte   []   b   =   s.getBytes();  
  for   (int   i=0;i<b.length;i++)    
  {  
  //if   (i==2)  
  System.out.println("b["+i+"]="+b[i]);  
   
  }  
   
  }  
  结果显示:  
  b[0]=-64  
  b[1]=-21  
  b[2]=-65  
  b[3]=-86  
  b[4]=97  
  b[5]=98  
  b[6]=99  
  ——————————————————————————————————  
  }Top

10 楼godfox(龙在天涯)回复于 2003-09-04 16:51:45 得分 0

为什么,汉字都为负数,英文都是正数?我还是不明白啊!到底怎么判断啊?可以根据我上面的例子写一个程序吗!?拜托了!Top

11 楼godfox(龙在天涯)回复于 2003-09-05 13:08:51 得分 0

我自己解决了!!通过汉字都为负数,英文都是正数!!  
  这个方法如下:  
  import   java.io.*;  
  import   java.util.*;  
   
  public   class   Test  
  {  
  String   getExtension(String   s){  
  String   str   =   "";  
  for(int   i   =   0;   i   <   s.length();   i++){  
  if(s.charAt(i)=='.'){  
  str=new   String(s.substring(i));  
  }  
  }  
  return   str;  
  }  
   
   
  public   static   void   main(String[]   args)  
  {  
   
  int   m   =   0;  
  int   j   =   0;  
  int   k   =   0;  
  String   str1   =    
  "斯多dfgd丁gdfghssfaafdfhh法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法斯多夫缩j的发撒非都撒d度发大幅度泗sfaafdf司法";  
  String   str2   =   "";  
  byte   []   x   =   str1.getBytes();  
  for(int   i   =   0;   i   <   140;   i++){  
  if(x[i]   <   0){  
  m++;  
  }  
  if(x[i]   >   0){  
  j++;  
  }  
  }  
  if(m   %   2   ==   0){  
  str2   =   new   String(x,0,140);  
  }  
  if(m   %   2   !=   0){  
  str2   =   new   String(x,0,139);  
  }  
   
  System.out.println(x.length+"       "+str2);  
   
  }  
  }  
  Top

相关问题

  • 如何取字符串(含汉字)中的字节数?
  • 如何在vb里获得字符串的字节数,要区分字母和汉字
  • 一个字符串包含汉字和字母,如何取得其字节数长度?
  • 如何获取一个包含了汉字,字母,标点符号的字符串的字节数,很多分
  • 字符串拆分
  • 字符串拆分
  • 请问如何统计字符串的字节数???
  • 怎么将字符串赋给字节数组???
  • #####请教如何用T-SQL求字符串存储的字节数?#####
  • 怎么获得字符串的长度(字节数)?

关键词

  • 汉字
  • 字符串
  • 拆分
  • 字节数组
  • 出现
  • 取得
  • str

得分解答快速导航

  • 帖主:godfox

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo