FileChannel读取编码问题?

plugin 发布于 2017/06/20 23:08
阅读 273
收藏 0
   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

奇怪

加载中
0
iBoxDB
iBoxDB

UTF-8是String的编码,UTF-16BE 是char的编码,改为UTF-16LE就是你想要的乱码。正常读出是运气好,一个有30个选项的题,闭上眼选对了。

plugin
plugin
UTF-8是String的编码,UTF-16BE 是char的编码 为啥呢
0
国栋
国栋

你把那段“some text encode as utf16e”改成中文试试看还行不行?

英文的话,utf-16 比起 utf-8 也就是在前面加了没用的“00”,用 utf-8 去读的话,00 可能被忽略了,剩下还是一样的。

0
plugin
plugin

引用来自“国栋”的评论

你把那段“some text encode as utf16e”改成中文试试看还行不行?

英文的话,utf-16 比起 utf-8 也就是在前面加了没用的“00”,用 utf-8 去读的话,00 可能被忽略了,剩下还是一样的。

改成中文。依然可以。什么原因?

好巧。下午花了半天时间看了您的关于编码的一系列文章。受益匪浅。

国栋
国栋
sorry,没仔细看,你最后用的是 asCharBuffer,char 就是 utf-16 编码,所以没有问题。
返回顶部
顶部