擦, 刚才写了很长一段, 结果发布出来, 没影了
1. "我的意思是写3个字节比如:456,422,333。出来一个“你”字"
"你", utf-8编码之后的字节序列是, [0xE4, 0xBD, 0xA0], 你这里的 "456", "422", "333" 一个字节是表示不了的
2. "windos系统怎么主动转换这个格式,默认txt文本不是ASNI嘛"
这个不是系统决定的, 是对应的软件决定的, 软件以某种编码解析文件的字节内容, 转换为字符串然后放在软件的编辑器中
比如, 最开始的时候, 编辑两个文件, 一个写入 [0xE4, 0xBD, 0xA0]["你"的utf-8编码后的字节序列], 另外一个文件写入 [0xC4, 0xE3]["你"的gbk编码后的字节序列]
然后 使用 ultraEdit, notepad++, 打开两个文件, 然后 都没有问题, 得到的是"正常字符串", 第一个文件两个编辑器使用utf-8编码打开, 第二个文件两个编辑器都是以gbk打开
然后 将第二个文件的内容替换为 [0xE4, 0xBD, 0xA0], 然后 再来使用两个软件打开两个文件, 你会发现 ultraEdit, 打开第二个文件 出现了"乱码", 仔细一看, notepadd++打开第二个文件的时候是以utf-8打开的, 然而 ultraEdit 是以gbk打开的
这里 ultraEdit, 应该是第一次"识别了文件的编码", 之后将其缓存在某个地方, 然后 之后打开文件的时候就直接以改编码打开, 当然可以手动更新打开该文件的编码
然后 notepad++, 应该是 每次都去"识别了文件的编码", atom 也和ultraEdit 使用的方式是一样的
如何验证这个, 可以吧内容被替换为[0xE4, 0xBD, 0xA0]的第二个文件, 复制一份, 然后 重新使用 ultraEdit 打开, 你会发现 此时ultraEdit打开改文件的编码就是 utf-8 了
至于 如何"识别了文件的编码", 这个就属于细节了, 可能有特定的优先级, 以及匹配度的计算吧