FileChannel读取编码问题?
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
奇怪
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
sorry,没仔细看,你最后用的是 asCharBuffer,char 就是 utf-16 编码,所以没有问题。
引用来自“国栋”的评论
你把那段“some text encode as utf16e”改成中文试试看还行不行?
英文的话,utf-16 比起 utf-8 也就是在前面加了没用的“00”,用 utf-8 去读的话,00 可能被忽略了,剩下还是一样的。
你把那段“some text encode as utf16e”改成中文试试看还行不行?
英文的话,utf-16 比起 utf-8 也就是在前面加了没用的“00”,用 utf-8 去读的话,00 可能被忽略了,剩下还是一样的。
UTF-8是String的编码,UTF-16BE 是char的编码 为啥呢
UTF-8是String的编码,UTF-16BE 是char的编码,改为UTF-16LE就是你想要的乱码。正常读出是运气好,一个有30个选项的题,闭上眼选对了。