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)