java怎么获取文件编码格式?

Stringpath="E:/temp/logcat/01_testcase/bbb.txt";InputStreaminputStream=newFileInputSt... String path = "E:/temp/logcat/01_testcase/bbb.txt";
InputStream inputStream = new FileInputStream(path);
byte[] head = new byte[300];
inputStream.read(head);
String code = "";
System.out.print(" " + head[0]);
System.out.print(" " + head[1]);
System.out.println(" " + head[3]);

if (head[0] == -1 && head[1] == -2) {
code = "UTF-16";
} else if (head[0] == -2 && head[1] == -1) {
code = "Unicode";
} else if (head[0] == -17 && head[1] == -69 && head[2] == -65) {
code = "UTF-8";
}

bbb.txt中的内容是abcd
运行结果:head[0]=97 head[1]=98 head[2]=100
head的运行结果并不是预期的 -17 -69 -65. 这是什么原因啊?
展开
 我来答
bd9006
2012-12-31 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
没错,就这样做,文件格式和文件内容,不是这样的。

普通文件,开始就是文件内容了。

有编码的,开头先是编码的定义,正如判断语句所写的那样
追问
1、什么样的文件不是普通文件?右键新建文本文档是普通文件?
2、有2个文件:aaa.txt bbb.txt
在本机双击打开时,aaa.txt默认编码是UTF-8 bbb.txt默认编码是GB2312
用上面的程序运行时 都不能获取正确的编码。
追答
最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表: 

EF BB BF  UTF-8
FE FF    UTF-16/UCS-2, little endian
FF FE    UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.

int[] head = new int[4];
InputStream inputStream = new FileInputStream(path);
for(int i=0; i<4; i++){

head[0]=inputStream.read();
}
inputStream.close();

String code = "ANSI";
if (head[0]==0xef && head[1]==0xbb && head[2]==0xbf) {
code = "UTF-8";

} else if(head[0]==0xfe && head[1]==0xff) {
code = "utf-16/ucs2, little endian";

} else if(head[0]==0xff && head[1]==0xfe) {
code = "utf-16/ucs2, big endian";

} else if(head[0]==0xff && head[1]==0xfe && head[2]==0x0 && head[3]==0x0) {
code = "UTF-32/ucs4, little endian";

} else if (head[0]==0x0 && head[1]==0x0 && head[2]==0xfe && head[3]==0xff) {
code = "UTF-32/ucs4, big endian";
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式