又是令人头痛的字符乱码问题!!请帮忙!

用windows的notepad.exe新建一个UTF-8编码的文件。然后用Java的FileInputStream读出来转换成UTF-8的字符第一个字符会是乱码。不知道为什么,有什么办法解决,先谢了。
如果各位有空,可能帮我测试一下。不知道是我的问题还是别的原因!

文件内容:<tr><td>a我爱你们</td></tr>

读取文件:
public class Test {
public static void main(String[] args) {
new Test().testFile();
}
public void testFile() {
File dir = new File("C:/a.txt");
try {
FileInputStream fi = new FileInputStream(dir);
byte[] bt = new byte[(int)dir.length()];
fi.read(bt);
System.out.println(new String(bt,"UTF-8"));
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
[该贴被cnng007于2007年08月17日 22:07修改过]

知道为什么了。是bom header的问题
但是Tomcat中的Include进来的文件还是不知道怎么处理,据说1.6已经解决这个问题,不知道有没有1.5下的解决方案,彻底的解决方案。
        ?
[该贴被cnng007于2007年08月23日 00:09修改过]

因为Java内部是Utf-8,而外界windows经常是GBK,所以,只有等这些操作系统愿意将他们缺省的字符集换成UTF-8,乱码问题才彻底解决,Java乱码不是Java的错。

如果自己打开二进制文件还可以自行处理,但用WEB容器就完了。

不是Java的错也是Tomcat的错。我所有的编码都是统一的(UTF-8)。其它的文本编辑器打开都是正确的(正确处理了Bom header的),因为按标准UTF-8文件可以加Bom header(字符: EF BB BF)也可以不加。
[该贴被cnng007于2007年08月27日 10:10修改过]