最近做了下网站首页静态化,发现各个浏览器浏览效果都没中文问题。但是发现了腾讯TT和遨游一个很奇怪的问题,那就是不管TT和遨游浏览器有没有勾上自动选择,首次访问我们网站时,都没有中文问题,但是奇怪的是,等到页面打开后,我又手动的将TT和遨游的编码勾上自动选择,结果又出现中文问题,给我的感觉就是TT和遨游第一次访问我们网站时,能知道网站的编码格式(UTF-8),但是我手动勾上自动选择后,它们却又不知道了...蛮奇怪的
虽然我觉得终端客户们,没我这么无聊,明明能正常访问了,却又去勾上自动选择...但是感觉真的很奇怪,其他IE6-IE8、火狐浏览器都是好的,不管是第一次访问还是访问网页后,又手动去改编码为自动选择,都可以。
备注:用的UTF-8,<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />这句是加在TITLE前面。请各位大大解惑。
虽然我觉得终端客户们,没我这么无聊,明明能正常访问了,却又去勾上自动选择...但是感觉真的很奇怪,其他IE6-IE8、火狐浏览器都是好的,不管是第一次访问还是访问网页后,又手动去改编码为自动选择,都可以。
备注:用的UTF-8,<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />这句是加在TITLE前面。请各位大大解惑。
我怀疑TT和遨游在编码勾上自动选择的时候,会去搜索该访问的html文件的编码格式,而UTF-8有两种,一种是带BOM,一种是不带BOM,而TT和遨游只将带BOM的UTF-8格式当作是UNCODE的编码格式(真伤..居然只将带BOM当作UTF-8....),所以当我们网页是以不带BOM的UTF-8格式进行编码的话,那么不被TT和遨游的自动选择所认证。
* 合并两个byte数组
* @param pByteA
* @param pByteB
* @return
*/
public static byte[] getMergeBytes(byte[] pByteA, byte[] pByteB){
int aCount = pByteA.length;
int bCount = pByteB.length;
byte[] b = new byte[aCount + bCount];
for(int i=0;i<aCount;i++){
b[i] = pByteA[i];
}
for(int i=0;i<bCount;i++){
b[aCount + i] = pByteB[i];
}
return b;
}
public void writeHtml(String htmlcode) {
String mainPath = "main.html";
try {
FileOutputStream fos = new FileOutputStream(new File(mainPath));
Writer out = new OutputStreamWriter(fos, "UTF-8");
String mainHtml = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte []data = new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF };
mainHtml = new String(getMergeBytes(data,mainHtml.getBytes()));
out.write(mainHtml);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}