开发者社区> 问答> 正文

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 奇怪

展开
收起
kun坤 2020-06-08 16:53:11 717 0
1 条回答
写回答
取消 提交回答
  • 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 可能被忽略了,剩下还是一样的。######

    引用来自“国栋”的评论

    你把那段“some text encode as utf16e”改成中文试试看还行不行? 英文的话,utf-16 比起 utf-8 也就是在前面加了没用的“00”,用 utf-8 去读的话,00 可能被忽略了,剩下还是一样的。

    改成中文。依然可以。什么原因? 好巧。下午花了半天时间看了您的关于编码的一系列文章。受益匪浅。######sorry,没仔细看,你最后用的是 asCharBuffer,char 就是 utf-16 编码,所以没有问题。

    2020-06-08 16:53:16
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载