一、文件字符编码不能推定
文件字符编码不能推定,原因:以一个极端情形为例进行说明,文件只包含一个A
字符,分别以“ASCII”和“GBK”字符编码方案进行编码,得到的字节流皆为单字节0x41
,因此,文件字符编码不能被推定。
二、文件字符编码只能否定
可通过以下方式确定字符编码C不是文件的字符编码:以字符编码C对文件字节流B1进行解码得到临时字符串S,再以字符编码C对S进行编码得到字节流B2,如果B1和B2不一致,那么字符编码C不是文件的字符编码。
示意代码如下:
1 | public static boolean isFileNotEncodedWith(File file, Charset charset) throws IOException { |
2.1、漏判
漏判:“不是”被错认为“是”。
根据“一、文件字符编码不能推定”可知,漏判是正常现象。
2.2、误判
误判:“是”被误认为“不是”。
一般情形下,误判不可能出现,除非一些很特殊的情形:
- 文件写程序未常规实现
- 即便对于同一个字符编码,文件写程序和Java判断程序采用的字符码表不尽相同
- …