src/share/classes/sun/nio/cs/ext/ISO2022_CN.java
Print this page
@@ -103,33 +103,38 @@
}
private char cnsDecode(byte byte1, byte byte2, byte SS) {
byte1 |= MSB;
byte2 |= MSB;
- if (SS == ISO_SS2_7) {
- return cnsDecoder.convToUnicode(byte1, byte2,
- cnsDecoder.unicodeCNS2);
-
- } else { //SS == ISO_SS3_7
- char[] outSurr = cnsDecoder.convToSurrogate(byte1, byte2,
- cnsDecoder.unicodeCNS3);
- if (outSurr == null || outSurr[0] != '\u0000')
+ int p = 0;
+ if (SS == ISO_SS2_7)
+ p = 1; //plane 2, index -- 1
+ else if (SS == ISO_SS3_7)
+ p = 2; //plane 3, index -- 2
+ else
+ return REPLACE_CHAR; //never happen.
+ char[] ret = cnsDecoder.toUnicode(byte1 & 0xff,
+ byte2 & 0xff,
+ p);
+ if (ret == null || ret.length == 2)
return REPLACE_CHAR;
- return outSurr[1];
+ return ret[0];
}
- }
private char SODecode(byte byte1, byte byte2, byte SOD) {
byte1 |= MSB;
byte2 |= MSB;
if (SOD == SODesigGB) {
return gb2312Decoder.decodeDouble(byte1 & 0xff,
byte2 & 0xff);
} else { // SOD == SODesigCNS
- return cnsDecoder.convToUnicode(byte1,
- byte2,
- cnsDecoder.unicodeCNS1);
+ char[] ret = cnsDecoder.toUnicode(byte1 & 0xff,
+ byte2 & 0xff,
+ 0);
+ if (ret == null)
+ return REPLACE_CHAR;
+ return ret[0];
}
}
private CoderResult decodeBufferLoop(ByteBuffer src,
CharBuffer dst)