Java CharsetDecoder不解码该数字

Java CharsetDecoder不解码该数字,java,utf-8,decode,utf8-decode,Java,Utf 8,Decode,Utf8 Decode,我有密码: byte[] str = new byte[17]; str[0] = 115; //s str[1] = 121; //y str[2] = 112; //p str[3] = 105; //i str[4] = 49; //current UnixTime numbers str[5] = 52; str[6] = 49; str[7] = 50; str[8] = 49; str[9] = 49; str[10] = 51; str[11] = 51; str[12] = 5

我有密码:

byte[] str = new byte[17];

str[0] = 115; //s
str[1] = 121; //y
str[2] = 112; //p
str[3] = 105; //i
str[4] = 49; //current UnixTime numbers
str[5] = 52;
str[6] = 49;
str[7] = 50;
str[8] = 49;
str[9] = 49;
str[10] = 51;
str[11] = 51;
str[12] = 50;
str[13] = 57;
str[14] = 52;
str[15] = 49;
str[16] = 50;


 CharBuffer cb = CharBuffer.allocate(2048);
 ByteBuffer buf = ByteBuffer.wrap(str);

 Charset ch = Charset.forName("UTF-8");
 CharsetDecoder cd = ch.newDecoder();
CoderResult cr = cd.decode(buf, cb, true);
cb.flip();
System.out.println("!"+cb.toString()+"!");
但是只进入控制台

西皮

  • System.out.println(bb.array().length)//十七,
  • 尝试

    cd.onMalformedInput(CodingErrorAction.IGNORE); cd.onUnmappableCharacter(CodingErrorAction.IGNORE)


请原谅我的英语。

这个程序适合我。这基本上和你的修正例子是一样的

   public static void main( String[] args )
           throws Exception
   {
      byte[] str = new byte[ 17 ];

      str[0] = 115; //s
      str[1] = 121; //y
      str[2] = 112; //p
      str[3] = 105; //i
      str[4] = 49; //current UnixTime numbers
      str[5] = 52;
      str[6] = 49;
      str[7] = 50;
      str[8] = 49;
      str[9] = 49;
      str[10] = 51;
      str[11] = 51;
      str[12] = 50;
      str[13] = 57;
      str[14] = 52;
      str[15] = 49;
      str[16] = 50;

      String test = new String( str, "UTF-8" );
      System.out.println( test );

      ByteBuffer buf = ByteBuffer.wrap( str );

      Charset ch = Charset.forName( "UTF-8" );
      CharsetDecoder cd = ch.newDecoder();
      CharBuffer cbuf = CharBuffer.allocate( 1024 );
      CoderResult cr = cd.decode( buf, cbuf, true );
      System.out.println("\"?"+cr+"?\"");

      cbuf.flip();

      System.out.println( "!" + cbuf.toString() + "!" );
   }
输出:

run:
sypi1412113329412
"?UNDERFLOW?"
!sypi1412113329412!
BUILD SUCCESSFUL (total time: 2 seconds)

您的代码目前无法编译。你不应该在什么地方有一个
CharBuffer
?理想情况下,发布一个简短但完整的程序来演示这个问题。在添加CharBuffer后,它对我很有效。我猜你的CharBuffer cb,无论你在哪里声明,都太小了。在这种情况下,您将获得
OVERFLOW
作为CoderResult,这意味着需要再次调用字符集转换器来完成作业?你想在这里显示什么?修复了完整的程序。尝试插入一张
cd.flush(cb)在解码调用(?)之后。还有,你得到了什么CoderResult?