无论是记事本,notepad++,还是UltraEdit,都可以轻松打开文本文件,
无论文件是Ansi编码,还是Unicode,Utf8.
实现这种功能的原理是什么,有没有代码比较简单的开源代码呢?
以 Windows 为例,通常来说 文件编码有 GBK UTF8-Without-BOM UTF8-BOM, UTF16LE UTF16BE ,实际上你只要解析这些编码即可,通过读取文件的 BOM 也就是前3个或者4个字符,可以判断是否为 UTF16 或者是 UTF8 BOM,对于 GBK 或者 UTF8 without BOM 就不行了,https://github.com/BYVoid/uchardet 这是 Byvoid 从 Mozilla 提取出来的 检测 文件编码的,除掉主文件 其他文件可以用于 Windows,检测出编码后,比如 Windows 可以使用 MultiByteToWideChar 转成 UTF16 然后输出。只是过程比较繁琐。
######"无论是记事本,notepad++,还是UltraEdit,都可以轻松打开文本文件 ",只是你没碰到,其实他们都会出现乱码,如果文件内容是任意编码的混合编码文件,没有哪个编辑器可以正确显示 ,因为不存在足够多的信息让编辑器识别每个编码的类型。对于单一编码的文件,可以通过对编码规则的试探来猜测是哪种编码的,比如一个文件的内容,如果每个字节的最高位都为0,则可以猜测它是assic码,再比如上面那位说的ucs2,如果前两个字节是0xfffe或0xfeff则认为这是ucs2编码,但实际文件中这两个字节经常不存在,所以编辑器没法识别,gb系列则每个字节的高位都是1,utf有很强的规则性也比较好识别,这里说的比较好识别不是一定能识别出来,而是规律性与其他编码区别较大,不太容易搞混。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。