fc = new RandomAccessFile("BufferToText.txt", "rw").getChannel();
fc.position(fc.size());
fc.write(ByteBuffer.wrap("some text encode as utf16e".getBytes("UTF-16BE")));
fc.close();
//这里再读出来。就不乱码了
fc = new FileInputStream("BufferToText.txt").getChannel();
buff.clear();
fc.read(buff);
buff.flip();
System.out.println(buff.asCharBuffer());
第三行写入这个文件的时候是以UTF-17BE格式写进去的。 但是下面读的时候没有任何形式指定编码。为什么能正常读出来?我的理解是这里会乱码。因为默认编码是UTF-8,你写进去是UTF-16BE 奇怪
UTF-8是String的编码,UTF-16BE 是char的编码,改为UTF-16LE就是你想要的乱码。正常读出是运气好,一个有30个选项的题,闭上眼选对了。######UTF-8是String的编码,UTF-16BE 是char的编码 为啥呢######你把那段“some text encode as utf16e”改成中文试试看还行不行? 英文的话,utf-16 比起 utf-8 也就是在前面加了没用的“00”,用 utf-8 去读的话,00 可能被忽略了,剩下还是一样的。######
改成中文。依然可以。什么原因? 好巧。下午花了半天时间看了您的关于编码的一系列文章。受益匪浅。######sorry,没仔细看,你最后用的是 asCharBuffer,char 就是 utf-16 编码,所以没有问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。