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?