Class CharsetEncoderWithSpecialChar

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void encodeSpecialCharacter​(byte b1, byte b2)
      Encodes one character as Shift JIS
      This is done to special-encode some problematic characters into SJIS because they are not properly encoded by Java.
      void flush()
      This function flush the regular char from byteBuffin to byteBuffOut with correct encoding.
      If byteBuffIn is empty, it will do nothing.
      protected void pushSpecialChar​(byte b1, byte b2)
      Push the special encoded bytes to the output byte buffer.
      void transcode​(MarkupOutput mo, java.lang.String decodeName, java.lang.String encodeName, byte[] data)
      Called when the charset specified is "SJIS" or "Shift_JIS" (Japanese).
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • CharsetEncoderWithSpecialChar

        public CharsetEncoderWithSpecialChar()
    • Method Detail

      • flush

        public void flush()
                   throws java.io.IOException,
                          java.io.UnsupportedEncodingException
        This function flush the regular char from byteBuffin to byteBuffOut with correct encoding.
        If byteBuffIn is empty, it will do nothing. byteBuffIn will be cleared by this function.
        DO NOT OVERRIDE, protected for visibility only.
        Specified by:
        flush in interface IFlushable
        Throws:
        java.io.IOException
        java.io.UnsupportedEncodingException
      • pushSpecialChar

        protected void pushSpecialChar​(byte b1,
                                       byte b2)
                                throws java.io.IOException,
                                       java.io.UnsupportedEncodingException
        Push the special encoded bytes to the output byte buffer. If different number of bytes are needed, use flushRegularChar() function follow by byteBuffOut.put(b1).put(b2)...put(bn)
        Parameters:
        b1 - is the first encoded byte
        b2 - is the second encoded byte
        Throws:
        java.io.UnsupportedEncodingException
        java.io.IOException
      • encodeSpecialCharacter

        protected void encodeSpecialCharacter​(byte b1,
                                              byte b2)
                                       throws java.io.IOException,
                                              java.io.UnsupportedEncodingException
        Encodes one character as Shift JIS
        This is done to special-encode some problematic characters into SJIS because they are not properly encoded by Java.
        For more information see: http://www-01.ibm.com/support/docview.wss?rs=133&context=SS5RG2&dc=DB560&dc=DB520&uid=swg21064197&loc=en_US&cs=UTF-8&lang=en&rss=ct133rational In addition to the characters mentioned on this link we also special encode circled numbers from 1 to 20 which also break in Japanese
        This can be overwritten to encode extra characters
        The recommended overwritten code snippet:
        protected void encodeShiftJISCharacter(byte b1, byte b2) throws UnsupportedEncodingException {
            if (b1 == 0x15 && b2 == 0x20) {//double dash
                pushSpecialChar((byte) 0x81, (byte) 0x5c)
            } else {
                super.encodeShiftJISCharactor(b1,b2);
            }
        }
        Throws:
        java.io.IOException
        java.io.UnsupportedEncodingException
      • transcode

        public void transcode​(MarkupOutput mo,
                              java.lang.String decodeName,
                              java.lang.String encodeName,
                              byte[] data)
                       throws java.lang.IllegalArgumentException,
                              java.lang.IllegalStateException,
                              java.io.UnsupportedEncodingException,
                              java.io.IOException
        Called when the charset specified is "SJIS" or "Shift_JIS" (Japanese).
        This is done to special-encode some problematic characters into SJIS because they are not properly encoded by Java.
        For more information see: http://www-01.ibm.com/support/docview.wss?rs=133&context=SS5RG2&dc=DB560&dc=DB520&uid=swg21064197&loc=en_US&cs=UTF-8&lang=en&rss=ct133rational In addition to the characters mentioned on this link we also special encode circled numbers from 1 to 20 which also break in Japanese
        Calls encodeShiftJISCharacter(byte[], String) for each character (2 bytes)
        Specified by:
        transcode in interface ICharsetTranscoder
        Parameters:
        mo - The output object
        decodeName - the charset specified as supported by Java to decode the data
        encodeName - the charset to encode the data
        data - an array with the bytes as passed by IServer. These bytes are encoded using "UnicodeLittle".
        Throws:
        java.lang.IllegalArgumentException - if an error occurs when appending data to the markup output
        java.lang.IllegalStateException - if an error occurs when appending data to the markup output
        java.io.UnsupportedEncodingException - if an error occurs when appending data to the markup output
        java.io.IOException