遍历目录下的所有文件"/>
用JAVA遍历目录下的所有文件
今天被一个哥们问住了:当文件中有ASCII编码和ANSI编码混排的时候,如何区分. 经过查找资料,结果如下: 中文总体上来说有ANSI编码和UNICODE编码ANSI称之为地区编码,UNICODE是国际编码
ANSI往往是某个国家为自己的语言所创立的,比如GB2312,GBK,BIG5等
UNICODE用来涵盖世界上所有的字符,简单的说就是全球用同一套编码格式. ASCII采用00~7F之间的编码,而ANSI则采用80~FF的两字节表示一个字符,UNICODE文章的开头会以FF FE开头来标识. "123好"的ANSI编码就是"123"以ASCII编码保存而'好'以ANSI保存.
ANSI编码的类型是当字在ASCII表中的时候,就以ASCII保存,如果不在,则以两位80-FF之间的编码保存. 范例: 123好
ASCII:31 32 33 3F (转换时溢出)
ANSI:31 32 33 BA C3
UNICODE:FF FE 31 00 32 00 33 00 7D 59 31 32 33 BA C3 没有以FF FE开头,故不是UNICODE
0< 31,32,33 <7F --ANSI
80< BA,C3 <FF --两字节组成一个ANSI 后来又简单的看了一下半角和全角的问题,其实就是对于ASCII码表中存在的字符是以ASCII码保存(半角)还是以ANSI码保存(全角)的不同而已. 测试程序如下(IDE默认编码:GBK): import java.io.UnsupportedEncodingException;
/** */ /**
* @author skylovers
*
*/
public class CodeTest ... {
private static String byte2Hex(byte b) ...{
String str = "";
int i = b;
if(i<0)...{
i=b+256;
}
char[] chars = new char[] ...{ '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
int poit = i / 16;
str += chars[poit];
poit = i % 16;
str += chars[poit];
return str;
}
/** *//**
* @param args
*/
public static void main(String[] args) ...{
String str = "123好";
byte[] code = str.getBytes();
for (byte b : code)
System.out.print(byte2Hex(b) + " ");
System.out.println();
try ...{
code = str.getBytes("unicode");
} catch (UnsupportedEncodingException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
for (byte b : code)
System.out.print(byte2Hex(b) + " ");
System.out.println();
try ...{
code = str.getBytes("ascii");
} catch (UnsupportedEncodingException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
for (byte b : code)
System.out.print(byte2Hex(b) + " ");
System.out.println();
System.out.println(new String(code));
}
}
更多推荐
用JAVA遍历目录下的所有文件
发布评论