中文截取的乱码问题 本帖最后由 li674688017 于 2012-08-14 11:24:48 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可能上面的例子不正确,其实我是在MappedByteBuffer里面取,不是String MappedByteBuffer mMbBuf = new RandomAccessFile(file, "r").getChannel().map(FileChannel.MapMode.READ_ONLY, 0, 100);byte[] buf = new byte[10];int i = 3; for (j = i; j < 10 + i; j++) { buf[j - i] = mMbBuf.get(j); }String s = new String(buf, "GBK");System.out.println("----->" + s);大致这样~~ 判断下byte 一个个取,别切到半个汉字就好了吧? 试试这个,我没怎么测试,你最好多测测 for (j = i; j < 10 + i; j++) { if(mMbBuf.get(j)<-30){ i++; } buf[j - i] = mMbBuf.get(j); } 上面的不对,改成:while(mMbBuf.get(i)<-30){ i++;}//这时候得到的i应该就是汉子的第一个字节码,一般来说汉子的第一个字节码大于-30,而后两个小于-30//这不是官方资料,是我观察的结果,所以你要多测试 很简单的呀 如果是乱码 byte值是负数 byte<=127 +1else +2这样不会切到半个了吧? while(mMbBuf.get(i)<-30){ i++;}//这时候得到的i应该就是汉子的第一个字节码,一般来说汉子的第一个字节码大于-30,而后两个小于-30//这不是官方资料,是我观察的结果,所以你要多测试 public class Test { public static void main(String[] args) { } /** * * @param str 要截取的字符 * @param bytelength 截取的字节长度 * @return */ public static String CutString(String str,int bytelength){ String tmp = str.substring(0,6); while(tmp.getBytes().length>bytelength){ tmp = tmp.substring(0,tmp.length()-1); } return tmp; }} 这个正则有人会写吗?哎 新手白白的问题 读取指定IP的mib库,实现set,get,getnext等操作 在线等:怎么用java访问注册表文件啊 在applet里头可以存取文件吗? 请问如何编译一个class ,在eclipse,如果没有main()函数 请问有什么好的html编辑工具,支持javascript的函数自动提示? Jbuider7中的光标位置不对。 我想编一个简单扫雷,请大家帮我看看! Runtime.getRuntime().exec()运行C语言的可执行程序 poi导出excel数据,科学计数法的问题。大大大大们,救命啊 数据库中怎么计算两个日期之间的天数?
可能上面的例子不正确,其实我是在MappedByteBuffer里面取,不是String
int i = 3;
for (j = i; j < 10 + i; j++) {
buf[j - i] = mMbBuf.get(j);
}
String s = new String(buf, "GBK");
System.out.println("----->" + s);
大致这样~~
if(mMbBuf.get(j)<-30){
i++;
}
buf[j - i] = mMbBuf.get(j);
}
i++;
}
//这时候得到的i应该就是汉子的第一个字节码,一般来说汉子的第一个字节码大于-30,而后两个小于-30
//这不是官方资料,是我观察的结果,所以你要多测试
else +2这样不会切到半个了吧?
i++;
}
//这时候得到的i应该就是汉子的第一个字节码,一般来说汉子的第一个字节码大于-30,而后两个小于-30
//这不是官方资料,是我观察的结果,所以你要多测试
}
/**
*
* @param str 要截取的字符
* @param bytelength 截取的字节长度
* @return
*/
public static String CutString(String str,int bytelength){
String tmp = str.substring(0,6);
while(tmp.getBytes().length>bytelength){
tmp = tmp.substring(0,tmp.length()-1);
}
return tmp;
}
}