1.一种JAVA文件及字节流的编码格式的判断方法,其特征在于,包括:
读取文件或字节流的前四个字节;
根据Unicode编码规则以及所述文件或字节流的前四个字节,判断所述文件或字节流的编码格式。
2.根据权利要求1所述的JAVA文件及字节流的编码格式的判断方法,其特征在于,所述根据Unicode编码规则以及所述文件的前四个字节,判断所述文件的编码格式,具体包括:
如果第1个字节为-1,并且第2个字节为-2,则编码格式为UTF-16;
如果第1个字节为-2,并且第2个字节为-1,则编码格式为Unicode;
如果第1个字节为-17,并且第2个字节为-69,并且第3个字节为-65,则编码格式为UTF-8。
3.根据权利要求2所述的JAVA文件及字节流的编码格式的判断方法,其特征在于,如果判定为编码格式为Unicode,则返回文件的编码格式为UTF-16。
4.根据权利要求1所述的JAVA文件及字节流的编码格式的判断方法,其特征在于,所述根据Unicode编码规则以及所述字节流的前四个字节,判断所述字节流的编码格式,具体包括:
将第1个字节head和第2个字节tail与0xff取与操作得到iHead和iTail,如果第一个新字节iHead>=0xa1并且iHead<=0xf7,同时第二个新字节iTail>=0xa1和iTail<=0xfe,根据Unicode编码规则,此字节流为GB2312;
将第1个字节head和第2个字节tail与0xff取与操作得到iHead和iTail,如果第一个新字节iHead>=0x81并且iHead<=0xf7,同时第二个新字节(iTail>=0x40和iTail<=0x7e)或(iTail>=0x80和iTail<=0xfe),根据Unicode编码规则,此字节流为GBK;
将第1个字节head和第2个字节tail与0xff取与操作得到iHead和iTail,如果第一个新字节iHead>=0xa1并且iHead<=0xf9,同时第二个新字节(iTail>=0x40和iTail<=0x7e)或(iTail>=0xa1和iTail<=0xfe),根据Unicode编码规则,此字节流为BIG5;
将第1个字节head和第2个字节tail2与0xff取与操作得到iHead和iTail2,如果第一个新字节iHead>=0x81并且iHead<=0xf9,同时第二个新字节(iTail2>=0x40和iTail2<=0x7e)或(iTail2>=0xa1和iTail2<=0xfe),第三个新字节(iTail3>=0x40和iTail3<=0x7e)或(iTail3>=0xa1和iTail3<=0xfe),第四个新字节(iTail4>=0x40和iTail4<=0x7e)或(iTail2>=0xa1和iTail4<=0xfe),根据Unicode编码规则,此字节流为UTF8。
5.根据权利要求1所述的JAVA文件及字节流的编码格式的判断方法,其特征在于,还包括:
通过判断字节流的编码格式来判断字符串的编码格式,具体包括:
设定未知编码格式的原字符串的编码格式为某一编码格式;
将所述原字符串转化为编码格式为所述设定的编码格式的字节流,然后将编码格式为设定的编码格式的字节流转换为新字符串,将所述原字符串与新字符串比较,如果两个字符串相同,则所述原字符串的编码格式为设定的编码格式。
6.一种JAVA文件及字节流的编码格式的判断装置,其特征在于,包括:
字节读取模块,用于读取文件或字节流的前四个字节;
判断模块,用于根据Unicode编码规则以及所述文件或字节流的前四个字节,判断所述文件或字节流的编码格式。
7.根据权利要求6所述的JAVA文件及字节流的编码格式的判断装置,其特征在于,所述判断模块根据Unicode编码规则以及所述文件的前四个字节,判断所述文件的编码格式,具体包括:
如果第1个字节为-1,并且第2个字节为-2,则编码格式为UTF-16;
如果第1个字节为-2,并且第2个字节为-1,则编码格式为Unicode;
如果第1个字节为-17,并且第2个字节为-69,并且第3个字节为-65,则编码格式为UTF-8。
8.根据权利要求7所述的JAVA文件及字节流的编码格式的判断装置,其特征在于,如果判定为编码格式为Unicode,则返回文件的编码格式为UTF-16。
9.根据权利要求6所述的JAVA文件及字节流的编码格式的判断装置,其特征在于,所述判断模块根据Unicode编码规则以及所述字节流的前四个字节,判断所述字节流的编码格式,具体包括:
将第1个字节head和第2个字节tail与0xff取与操作得到iHead和iTail,如果第一个新字节iHead>=0xa1并且iHead<=0xf7,同时第二个新字节iTail>=0xa1和iTail<=0xfe,根据Unicode编码规则,此字节流为GB2312;
将第1个字节head和第2个字节tail与0xff取与操作得到iHead和iTail,如果第一个新字节iHead>=0x81并且iHead<=0xf7,同时第二个新字节(iTail>=0x40和iTail<=0x7e)或(iTail>=0x80和iTail<=0xfe),根据Unicode编码规则,此字节流为GBK;
将第1个字节head和第2个字节tail与0xff取与操作得到iHead和iTail,如果第一个新字节iHead>=0xa1并且iHead<=0xf9,同时第二个新字节(iTail>=0x40和iTail<=0x7e)或(iTail>=0xa1和iTail<=0xfe),根据Unicode编码规则,此字节流为BIG5;
将第1个字节head和第2个字节tail2与0xff取与操作得到iHead和iTail2,如果第一个新字节iHead>=0x81并且iHead<=0xf9,同时第二个新字节(iTail2>=0x40和iTail2<=0x7e)或(iTail2>=0xa1和iTail2<=0xfe),第三个新字节(iTail3>=0x40和iTail3<=0x7e)或(iTail3>=0xa1和iTail3<=0xfe),第四个新字节(iTail4>=0x40和iTail4<=0x7e)或(iTail2>=0xa1和iTail4<=0xfe),根据Unicode编码规则,此字节流为UTF8。
10.根据权利要求6所述的JAVA文件及字节流的编码格式的判断装置,其特征在于,所述判断模块还用于通过判断字节流的编码格式来判断字符串的编码格式,其具体包括:
设定未知编码格式的原字符串的编码格式为某一编码格式;
将所述原字符串转化为编码格式为所述设定的编码格式的字节流,然后将编码格式为设定的编码格式的字节流转换为新字符串,将所述原字符串与新字符串比较,如果两个字符串相同,则所述原字符串的编码格式为设定的编码格式。