按字节分割文件,乱码处理!! 如题,求解,谢谢各位了!小弟新手!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主说的乱码是指分割时对汉字的处理吗,我这里正好有代码,你可以看看:public static String bSubstring(String s, int length) throws Exception { byte[] bytes = s.getBytes("Unicode"); int n = 0; // 表示当前的字节数 int i = 2; // 要截取的字节数,从第3个字节开始 for (; i < bytes.length && n < length; i++) { // 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节 if (i % 2 == 1) { n++; // 在UCS2第二个字节时n加1 } else { // 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节 if (bytes[i] != 0) { n++; } } } // 如果i为奇数时,处理成偶数 if (i % 2 == 1) { // 该UCS2字符是汉字时,去掉这个截一半的汉字 if (bytes[i - 1] != 0) i = i - 1; // 该UCS2字符是字母或数字,则保留该字符 else i = i + 1; } return new String(bytes, 0, i, "Unicode"); } 楼上的只适合中文GBK,其他编码完全不行。 可以先检测文件的编码格式先!再获取到文件的编码格式!可以使用cpdetector_1.0.8.jar来获取文件的编码格式! 楼主是需要的这个吗 public static void main(String[] args) { String str = "english汉字test测试"; System.out.println(splitStr(str,6)); System.out.println(splitStr(str,7)); System.out.println(splitStr(str,8)); System.out.println(splitStr(str,9)); System.out.println(splitStr(str,10)); System.out.println(splitStr(str,11)); } public static String splitStr(String str, int length){ char[] cs = str.toCharArray(); int index = 0; while(length > 0){ if(cs[index++] > 255){ length -= 2; }else{ length--; } } return str.substring(0, length == 0 ? index : --index); } Mozilla发布过一个编码检测的算法,这里有一个开源的java包:http://jchardet.sourceforge.net/index.html 首先必须是判断编码,确定了编码就确定有几个字节来确定一个字符了。不过里面混着普通的字符。例如半角的英文字母。不过这样的字符是不符合之前确认的编码规则的。这样就可以把这些字符区分出来了。分割文件还有个关注的地方就是文件的分割点。比如,500k分成一个文件。不过第500k个字节和500k+1个字节组成一个字符。 这样不要分开。否则下一页也会出现乱码,判断的方法还是使用编码的规则如果确定是半个字符。就要把下一个字符算到本页上。或者把这个字符算到下一页上。有关编码的规则就要查相关的文档了。 目前比较流行的是unicode 和 gbk的。做几个常用的就可以了。 可以再页面分割<c:forTokens var="token" items="${resource.resourceURL}" delims=";" varStatus="status" > <a href="DownLoadResource.action?file=${fn:split(token,'?')[0]}">${fn:split(token,"?")[1]}</a> <br/> </c:forTokens> JDBC里一个问题 求救:调用xStream.toXML(javbean)报错 内部类对象可以调用外部类类成员嘛? HashMap和Hashtable的区别? SWING 按鈕 著色 请问:在java程序中如何调用ultraEdit打开文本文件? j2ee在什么平台上运行啊,JCreator Pro行吗? [求助]一个关于JRadioButton的问题,麻烦各位大虾指导指导,在线等(急) 为什么Class.forName("..")找不到class? 请教各位大虾!java 求解!关于jsp页面大小写的怪事 java练习题
int n = 0; // 表示当前的字节数
int i = 2; // 要截取的字节数,从第3个字节开始
for (; i < bytes.length && n < length; i++) {
// 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节
if (i % 2 == 1) {
n++; // 在UCS2第二个字节时n加1
} else {
// 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节
if (bytes[i] != 0) {
n++;
}
}
}
// 如果i为奇数时,处理成偶数
if (i % 2 == 1) {
// 该UCS2字符是汉字时,去掉这个截一半的汉字
if (bytes[i - 1] != 0)
i = i - 1;
// 该UCS2字符是字母或数字,则保留该字符
else
i = i + 1;
}
return new String(bytes, 0, i, "Unicode");
}
String str = "english汉字test测试";
System.out.println(splitStr(str,6));
System.out.println(splitStr(str,7));
System.out.println(splitStr(str,8));
System.out.println(splitStr(str,9));
System.out.println(splitStr(str,10));
System.out.println(splitStr(str,11));
}
public static String splitStr(String str, int length){
char[] cs = str.toCharArray();
int index = 0;
while(length > 0){
if(cs[index++] > 255){
length -= 2;
}else{
length--;
}
}
return str.substring(0, length == 0 ? index : --index);
}
Mozilla发布过一个编码检测的算法,这里有一个开源的java包:http://jchardet.sourceforge.net/index.html
<a href="DownLoadResource.action?file=${fn:split(token,'?')[0]}">${fn:split(token,"?")[1]}</a>
<br/>
</c:forTokens>