0

この文字列を NIO2 チャネルで読み取ると、次のようになります。

È bla bla bla

コンソールでこれを取得します:

? bla bla bla

コードが次のような場合、どのように文字セットを設定できるのか疑問に思っていました:

RandomAccessFile aFile = new RandomAccessFile("in.txt", "rw");
FileChannel inChannel = aFile.getChannel();

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buf);
while (bytesRead != -1) {

  System.out.println("Read " + bytesRead);
  buf.flip();

  while(buf.hasRemaining()){
      System.out.print((char) buf.get());
  }

  buf.clear();
  bytesRead = inChannel.read(buf);
}
aFile.close();

私はこのようなものを設定したいと思います:

StandardCharsets.ISO_8859_1
4

1 に答える 1

1

コードからわかるように、FileChannel からバイトを読み取っています。これらのバイトをどのように解釈するかは、あなた次第です。

コードでは、読み取ったバイトは文字列に変換されますSystem.out.print((char) buf.get());。これが、その出力が表示される理由です。

目的の文字セットを指定するコンストラクターをString使用して、明示的に new を作成してみてください。String(byte[] bytes, Charset charset)

于 2013-07-28T12:31:21.977 に答える