求助]一个包含中英文的字符串转换成字节数组后,怎样保证拆分的时候不出现把汉字从中间分开而出现乱码?
[求助]一个包含中英文的字符串转换成字节数组后,怎样保证拆分的时候不出现把汉字从中间分开而出现乱码?
而且,我想从这个字节数组里,截取任意的一段。
比如说:
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




