fge*_*fge 2 java character-encoding
[注意:问题经过大量的游戏后基本上重新编辑]
在Java中,您可以Charset定义字符编码.从a Charset,您可以获得两个对象:
CharsetEncoder,将char序列转换为byte序列;CharsetDecoder,将byte序列转换为char序列.这两个类都定义了以下方法:.onUnmappableCharacter()和.onMalformedInput().如果你告诉他们每一个CodingErrorAction.REPORT他们将抛出这两个例外中的任何一个:UnmappableCharacterException和MalformedInputException.
使用a CharsetEncoder,我可以生成它们:
CharBuffer含有两个高代理的方式喂它- > MalformedInputException;CharBuffer包含编码不能代表的char(或char序列)来提供它:UnmappableCharacterException.用CharsetDecoder:
MalformedInputException- 容易做;UnmappableCharacterException - >怎么样?尽管我所有的研究,我都无法做到.
所有这一切尽管已经玩了很多CharsetDecoder.我找不到Charset能够产生这个错误的字节序列组合......
有没有?
这只是找到一个具有不可映射的字节序列的字符集.
举个例子吧IBM1098.它无法映射十六进制字节
0x80
0x81
Run Code Online (Sandbox Code Playgroud)
所以把它们放进去ByteBuffer,倒回它,然后尝试解码它.
public class Test {
public static void main(String[] args) throws CharacterCodingException {
ByteBuffer buffer = ByteBuffer.allocate(8);
buffer.putInt(0x80);
buffer.putInt(0x81);
buffer.position(0);
Charset charset = Charset.forName("IBM1098");
CharsetDecoder decoder = charset.newDecoder();
decoder.decode(buffer);
}
}
Run Code Online (Sandbox Code Playgroud)
这引发了
Exception in thread "main" java.nio.charset.UnmappableCharacterException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:282)
at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:816)
at com.test.Test.main(Test.java:16)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |