<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FI18N%2FCharset</id>
		<title>Java Tutorial/I18N/Charset - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FI18N%2FCharset"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/I18N/Charset&amp;action=history"/>
		<updated>2026-04-07T10:46:00Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/I18N/Charset&amp;diff=4542&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/I18N/Charset&amp;diff=4542&amp;oldid=prev"/>
				<updated>2010-06-01T05:03:03Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:03, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/I18N/Charset&amp;diff=4541&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/I18N/Charset&amp;diff=4541&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Converting Between Strings (Unicode) and Other Character Set Encodings ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.nio.ByteBuffer;&lt;br /&gt;
import java.nio.CharBuffer;&lt;br /&gt;
import java.nio.charset.Charset;&lt;br /&gt;
import java.nio.charset.CharsetDecoder;&lt;br /&gt;
import java.nio.charset.CharsetEncoder;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    Charset charset = Charset.forName(&amp;quot;ISO-8859-1&amp;quot;);&lt;br /&gt;
    CharsetDecoder decoder = charset.newDecoder();&lt;br /&gt;
    CharsetEncoder encoder = charset.newEncoder();&lt;br /&gt;
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(&amp;quot;a string&amp;quot;));&lt;br /&gt;
    CharBuffer cbuf = decoder.decode(bbuf);&lt;br /&gt;
    String s = cbuf.toString();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Detect non-ASCII characters in string ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.nio.ByteBuffer;&lt;br /&gt;
import java.nio.CharBuffer;&lt;br /&gt;
import java.nio.charset.Charset;&lt;br /&gt;
import java.nio.charset.CharsetDecoder;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    byte[] invalidBytes = &amp;quot;� &amp;quot;.getBytes();&lt;br /&gt;
    byte[] validBytes = &amp;quot;(c)&amp;quot;.getBytes();&lt;br /&gt;
    CharsetDecoder decoder = Charset.forName(&amp;quot;US-ASCII&amp;quot;).newDecoder();&lt;br /&gt;
    CharBuffer buffer = decoder.decode(ByteBuffer.wrap(validBytes));&lt;br /&gt;
    System.out.println(Arrays.toString(buffer.array()));&lt;br /&gt;
    buffer = decoder.decode(ByteBuffer.wrap(invalidBytes));&lt;br /&gt;
    System.out.println(Arrays.toString(buffer.array()));&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  encoder and decoder use a supplied ByteBuffer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.nio.ByteBuffer;&lt;br /&gt;
import java.nio.CharBuffer;&lt;br /&gt;
import java.nio.charset.Charset;&lt;br /&gt;
import java.nio.charset.CharsetDecoder;&lt;br /&gt;
import java.nio.charset.CharsetEncoder;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    Charset charset = Charset.forName(&amp;quot;ISO-8859-1&amp;quot;);&lt;br /&gt;
    CharsetDecoder decoder = charset.newDecoder();&lt;br /&gt;
    CharsetEncoder encoder = charset.newEncoder();&lt;br /&gt;
    ByteBuffer bbuf = ByteBuffer.allocateDirect(1024);&lt;br /&gt;
    CharBuffer cbuf = CharBuffer.allocate(1024);&lt;br /&gt;
    encoder.encode(cbuf, bbuf, false);&lt;br /&gt;
    bbuf.flip();&lt;br /&gt;
    decoder.decode(bbuf, cbuf, false);&lt;br /&gt;
    cbuf.flip();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  extends Charset to create Hex Charset ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * HexCharset.java&lt;br /&gt;
 *&lt;br /&gt;
 * Created on 22 December 2005, 21:56&lt;br /&gt;
 *&lt;br /&gt;
 * To change this template, choose Tools | Options and locate the template under&lt;br /&gt;
 * the Source Creation and Management node. Right-click the template and choose&lt;br /&gt;
 * Open. You can then make changes to the template in the Source Editor.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import java.nio.charset.Charset;&lt;br /&gt;
import java.nio.charset.CharsetDecoder;&lt;br /&gt;
import java.nio.charset.CharsetEncoder;&lt;br /&gt;
import java.nio.charset.CoderResult;&lt;br /&gt;
/**&lt;br /&gt;
 * Codec to translate between hex coding and byte string.&lt;br /&gt;
 * Hex output is capital if the char set name is given in capitals.&lt;br /&gt;
 * hex:nn used as a charset name inserts \n after every nnth character.&lt;br /&gt;
 * @author malcolmm&lt;br /&gt;
 */&lt;br /&gt;
public class HexCharset extends Charset {&lt;br /&gt;
    private final static String codeHEX = &amp;quot;0123456789ABCDEF&amp;quot;;&lt;br /&gt;
    private final static String codehex = &amp;quot;0123456789abcdef&amp;quot;;&lt;br /&gt;
    private String codes;&lt;br /&gt;
    private Integer measure;&lt;br /&gt;
    &lt;br /&gt;
    /** Creates a new instance of HexCharset &lt;br /&gt;
     * @param caps true for A-F, false for a-f&lt;br /&gt;
     */&lt;br /&gt;
    public HexCharset(boolean caps) {&lt;br /&gt;
        super(caps ? &amp;quot;HEX&amp;quot; : &amp;quot;hex&amp;quot;, new String[]{&amp;quot;HEX&amp;quot;});&lt;br /&gt;
        codes = caps ? codeHEX : codehex;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Construct the charset&lt;br /&gt;
     * @param caps true for A-F, false for a-f&lt;br /&gt;
     * @param measure Line width for decoding&lt;br /&gt;
     */&lt;br /&gt;
    public HexCharset(boolean caps, int measure) {&lt;br /&gt;
        super((caps ? &amp;quot;HEX&amp;quot; : &amp;quot;hex&amp;quot;) + &amp;quot;:&amp;quot; + measure, new String[]{&amp;quot;HEX&amp;quot;});&lt;br /&gt;
        codes = caps ? codeHEX : codehex;&lt;br /&gt;
        this.measure = measure;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Constructs a new encoder for this charset. &lt;br /&gt;
     * &lt;br /&gt;
     * @return  A new encoder for this charset&lt;br /&gt;
     */&lt;br /&gt;
    public CharsetEncoder newEncoder() {&lt;br /&gt;
        return new Encoder();&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Constructs a new decoder for this charset. &lt;br /&gt;
     * &lt;br /&gt;
     * @return  A new decoder for this charset&lt;br /&gt;
     */&lt;br /&gt;
    public CharsetDecoder newDecoder() {&lt;br /&gt;
        return new Decoder();&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Tells whether or not this charset contains the given charset.&lt;br /&gt;
     * &lt;br /&gt;
     *  A charset &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; is said to &amp;lt;i&amp;gt;contain&amp;lt;/i&amp;gt; a charset &amp;lt;i&amp;gt;D&amp;lt;/i&amp;gt; if,&lt;br /&gt;
     * and only if, every character representable in &amp;lt;i&amp;gt;D&amp;lt;/i&amp;gt; is also&lt;br /&gt;
     * representable in &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;.  If this relationship holds then it is&lt;br /&gt;
     * guaranteed that every string that can be encoded in &amp;lt;i&amp;gt;D&amp;lt;/i&amp;gt; can also be&lt;br /&gt;
     * encoded in &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; without performing any replacements.&lt;br /&gt;
     * &lt;br /&gt;
     *  That &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; contains &amp;lt;i&amp;gt;D&amp;lt;/i&amp;gt; does not imply that each character&lt;br /&gt;
     * representable in &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; by a particular byte sequence is represented&lt;br /&gt;
     * in &amp;lt;i&amp;gt;D&amp;lt;/i&amp;gt; by the same byte sequence, although sometimes this is the&lt;br /&gt;
     * case.&lt;br /&gt;
     * &lt;br /&gt;
     *  Every charset contains itself.&lt;br /&gt;
     * &lt;br /&gt;
     *  This method computes an approximation of the containment relation:&lt;br /&gt;
     * If it returns &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; then the given charset is known to be&lt;br /&gt;
     * contained by this charset; if it returns &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;, however, then&lt;br /&gt;
     * it is not necessarily the case that the given charset is not contained&lt;br /&gt;
     * in this charset.&lt;br /&gt;
     * &lt;br /&gt;
     * @return  &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; if, and only if, the given charset&lt;br /&gt;
     *          is contained in this charset&lt;br /&gt;
     */&lt;br /&gt;
    public boolean contains(Charset cs) {&lt;br /&gt;
        return cs instanceof HexCharset;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private class Encoder extends CharsetEncoder {&lt;br /&gt;
        private boolean unpaired;&lt;br /&gt;
        private int nyble;&lt;br /&gt;
        private Encoder() {&lt;br /&gt;
            super(HexCharset.this, 0.49f, 1f);&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        /**&lt;br /&gt;
         * Flushes this encoder.&lt;br /&gt;
         * &lt;br /&gt;
         *  The default implementation of this method does nothing, and always&lt;br /&gt;
         * returns {@link CoderResult#UNDERFLOW}.  This method should be overridden&lt;br /&gt;
         * by encoders that may need to write final bytes to the output buffer&lt;br /&gt;
         * once the entire input sequence has been read. &lt;br /&gt;
         * &lt;br /&gt;
         * @param  out&lt;br /&gt;
         *         The output byte buffer&lt;br /&gt;
         * &lt;br /&gt;
         * @return  A coder-result object, either {@link CoderResult#UNDERFLOW} or&lt;br /&gt;
         *          {@link CoderResult#OVERFLOW}&lt;br /&gt;
         */&lt;br /&gt;
        protected java.nio.charset.CoderResult implFlush(java.nio.ByteBuffer out) {&lt;br /&gt;
            if(!unpaired) {&lt;br /&gt;
                implReset();&lt;br /&gt;
                return CoderResult.UNDERFLOW;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
                throw new IllegalArgumentException(&amp;quot;Hex string must be an even number of digits&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        /**&lt;br /&gt;
         * Encodes one or more characters into one or more bytes.&lt;br /&gt;
         * &lt;br /&gt;
         *  This method encapsulates the basic encoding loop, encoding as many&lt;br /&gt;
         * characters as possible until it either runs out of input, runs out of room&lt;br /&gt;
         * in the output buffer, or encounters an encoding error.  This method is&lt;br /&gt;
         * invoked by the {@link #encode encode} method, which handles result&lt;br /&gt;
         * interpretation and error recovery.&lt;br /&gt;
         * &lt;br /&gt;
         *  The buffers are read from, and written to, starting at their current&lt;br /&gt;
         * positions.  At most {@link Buffer#remaining in.remaining()} characters&lt;br /&gt;
         * will be read, and at most {@link Buffer#remaining out.remaining()}&lt;br /&gt;
         * bytes will be written.  The buffers&amp;quot; positions will be advanced to&lt;br /&gt;
         * reflect the characters read and the bytes written, but their marks and&lt;br /&gt;
         * limits will not be modified.&lt;br /&gt;
         * &lt;br /&gt;
         *  This method returns a {@link CoderResult} object to describe its&lt;br /&gt;
         * reason for termination, in the same manner as the {@link #encode encode}&lt;br /&gt;
         * method.  Most implementations of this method will handle encoding errors&lt;br /&gt;
         * by returning an appropriate result object for interpretation by the&lt;br /&gt;
         * {@link #encode encode} method.  An optimized implementation may instead&lt;br /&gt;
         * examine the relevant error action and implement that action itself.&lt;br /&gt;
         * &lt;br /&gt;
         *  An implementation of this method may perform arbitrary lookahead by&lt;br /&gt;
         * returning {@link CoderResult#UNDERFLOW} until it receives sufficient&lt;br /&gt;
         * input.  &lt;br /&gt;
         * &lt;br /&gt;
         * @param  in&lt;br /&gt;
         *         The input character buffer&lt;br /&gt;
         * &lt;br /&gt;
         * @param  out&lt;br /&gt;
         *         The output byte buffer&lt;br /&gt;
         * &lt;br /&gt;
         * @return  A coder-result object describing the reason for termination&lt;br /&gt;
         */&lt;br /&gt;
        public java.nio.charset.CoderResult encodeLoop(java.nio.CharBuffer in, java.nio.ByteBuffer out) {&lt;br /&gt;
            while(in.remaining() &amp;gt; 0) {&lt;br /&gt;
                if(out.remaining() &amp;lt;= 0)&lt;br /&gt;
                    return CoderResult.OVERFLOW;&lt;br /&gt;
                char inch = in.get();&lt;br /&gt;
                if(!Character.isWhitespace(inch)) {&lt;br /&gt;
                    int d = Character.digit(inch, 16);&lt;br /&gt;
                    if(d &amp;lt; 0)&lt;br /&gt;
                        throw new IllegalArgumentException(&amp;quot;Bad hex character &amp;quot; + inch);&lt;br /&gt;
                    if(unpaired)&lt;br /&gt;
                        out.put((byte)(nyble | d));&lt;br /&gt;
                    else&lt;br /&gt;
                        nyble = d &amp;lt;&amp;lt; 4;&lt;br /&gt;
                    unpaired = !unpaired;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            return CoderResult.UNDERFLOW;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /**&lt;br /&gt;
         * Clear state&lt;br /&gt;
         */&lt;br /&gt;
        protected void implReset() {&lt;br /&gt;
            unpaired = false;&lt;br /&gt;
            nyble = 0;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private class Decoder extends CharsetDecoder {&lt;br /&gt;
        private int charCount;&lt;br /&gt;
        &lt;br /&gt;
        private Decoder() {&lt;br /&gt;
            super(HexCharset.this, 2f, measure == null ? 2f : 2f + (2f / (float)measure));&lt;br /&gt;
        }&lt;br /&gt;
        /**&lt;br /&gt;
         * Decodes one or more bytes into one or more characters.&lt;br /&gt;
         * &lt;br /&gt;
         *  This method encapsulates the basic decoding loop, decoding as many&lt;br /&gt;
         * bytes as possible until it either runs out of input, runs out of room&lt;br /&gt;
         * in the output buffer, or encounters a decoding error.  This method is&lt;br /&gt;
         * invoked by the {@link #decode decode} method, which handles result&lt;br /&gt;
         * interpretation and error recovery.&lt;br /&gt;
         * &lt;br /&gt;
         *  The buffers are read from, and written to, starting at their current&lt;br /&gt;
         * positions.  At most {@link Buffer#remaining in.remaining()} bytes&lt;br /&gt;
         * will be read, and at most {@link Buffer#remaining out.remaining()}&lt;br /&gt;
         * characters will be written.  The buffers&amp;quot; positions will be advanced to&lt;br /&gt;
         * reflect the bytes read and the characters written, but their marks and&lt;br /&gt;
         * limits will not be modified.&lt;br /&gt;
         * &lt;br /&gt;
         *  This method returns a {@link CoderResult} object to describe its&lt;br /&gt;
         * reason for termination, in the same manner as the {@link #decode decode}&lt;br /&gt;
         * method.  Most implementations of this method will handle decoding errors&lt;br /&gt;
         * by returning an appropriate result object for interpretation by the&lt;br /&gt;
         * {@link #decode decode} method.  An optimized implementation may instead&lt;br /&gt;
         * examine the relevant error action and implement that action itself.&lt;br /&gt;
         * &lt;br /&gt;
         *  An implementation of this method may perform arbitrary lookahead by&lt;br /&gt;
         * returning {@link CoderResult#UNDERFLOW} until it receives sufficient&lt;br /&gt;
         * input.  &lt;br /&gt;
         * &lt;br /&gt;
         * @param  in&lt;br /&gt;
         *         The input byte buffer&lt;br /&gt;
         * &lt;br /&gt;
         * @param  out&lt;br /&gt;
         *         The output character buffer&lt;br /&gt;
         * &lt;br /&gt;
         * @return  A coder-result object describing the reason for termination&lt;br /&gt;
         */&lt;br /&gt;
        public java.nio.charset.CoderResult decodeLoop(java.nio.ByteBuffer in, java.nio.CharBuffer out) {&lt;br /&gt;
            while(in.remaining() &amp;gt; 0) {&lt;br /&gt;
                if(measure != null &amp;amp;&amp;amp; charCount &amp;gt;= measure) {&lt;br /&gt;
                    if(out.remaining() == 0)&lt;br /&gt;
                        return CoderResult.OVERFLOW;&lt;br /&gt;
                    out.put(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                    charCount = 0;&lt;br /&gt;
                }&lt;br /&gt;
                if(out.remaining() &amp;lt; 2)&lt;br /&gt;
                    return CoderResult.OVERFLOW;&lt;br /&gt;
                int b = in.get() &amp;amp; 0xff;&lt;br /&gt;
                out.put(codes.charAt(b &amp;gt;&amp;gt;&amp;gt; 4));&lt;br /&gt;
                out.put(codes.charAt(b &amp;amp; 0x0f));&lt;br /&gt;
                charCount += 2;&lt;br /&gt;
            }&lt;br /&gt;
            return CoderResult.UNDERFLOW;&lt;br /&gt;
        }&lt;br /&gt;
        /**&lt;br /&gt;
         * Resets this decoder, clearing any charset-specific internal state.&lt;br /&gt;
         * &lt;br /&gt;
         *  The default implementation of this method does nothing.  This method&lt;br /&gt;
         * should be overridden by decoders that maintain internal state.  &lt;br /&gt;
         */&lt;br /&gt;
        protected void implReset() {&lt;br /&gt;
            charCount = 0;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  List Charsets ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.nio.charset.Charset;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.Set;&lt;br /&gt;
import java.util.SortedMap;&lt;br /&gt;
public class Main {&lt;br /&gt;
  static public void main(String args[]) throws Exception {&lt;br /&gt;
    SortedMap charsets = Charset.availableCharsets();&lt;br /&gt;
    Set names = charsets.keySet();&lt;br /&gt;
    for (Iterator e = names.iterator(); e.hasNext();) {&lt;br /&gt;
      String name = (String) e.next();&lt;br /&gt;
      Charset charset = (Charset) charsets.get(name);&lt;br /&gt;
      System.out.println(charset);&lt;br /&gt;
      Set aliases = charset.aliases();&lt;br /&gt;
      for (Iterator ee = aliases.iterator(); ee.hasNext();) {&lt;br /&gt;
        System.out.println(&amp;quot;    &amp;quot; + ee.next());&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Listing All Available Unicode to Character Set Converters ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.nio.charset.Charset;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    Map map = Charset.availableCharsets();&lt;br /&gt;
    Iterator it = map.keySet().iterator();&lt;br /&gt;
    while (it.hasNext()) {&lt;br /&gt;
      // Get charset name&lt;br /&gt;
      String charsetName = (String) it.next();&lt;br /&gt;
      // Get charset&lt;br /&gt;
      Charset charset = Charset.forName(charsetName);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Translate Charset ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.RandomAccessFile;&lt;br /&gt;
import java.nio.ByteBuffer;&lt;br /&gt;
import java.nio.CharBuffer;&lt;br /&gt;
import java.nio.MappedByteBuffer;&lt;br /&gt;
import java.nio.channels.FileChannel;&lt;br /&gt;
import java.nio.charset.Charset;&lt;br /&gt;
import java.nio.charset.CharsetDecoder;&lt;br /&gt;
import java.nio.charset.CharsetEncoder;&lt;br /&gt;
public class Main {&lt;br /&gt;
  static public void main(String args[]) throws Exception {&lt;br /&gt;
    File infile = new File(&amp;quot;inFilename&amp;quot;);&lt;br /&gt;
    File outfile = new File(&amp;quot;outFilename&amp;quot;);&lt;br /&gt;
    RandomAccessFile inraf = new RandomAccessFile(infile, &amp;quot;r&amp;quot;);&lt;br /&gt;
    RandomAccessFile outraf = new RandomAccessFile(outfile, &amp;quot;rw&amp;quot;);&lt;br /&gt;
    FileChannel finc = inraf.getChannel();&lt;br /&gt;
    FileChannel foutc = outraf.getChannel();&lt;br /&gt;
    MappedByteBuffer inmbb = finc.map(FileChannel.MapMode.READ_ONLY, 0, (int) infile.length());&lt;br /&gt;
    Charset inCharset = Charset.forName(&amp;quot;UTF8&amp;quot;);&lt;br /&gt;
    Charset outCharset = Charset.forName(&amp;quot;UTF16&amp;quot;);&lt;br /&gt;
    CharsetDecoder inDecoder = inCharset.newDecoder();&lt;br /&gt;
    CharsetEncoder outEncoder = outCharset.newEncoder();&lt;br /&gt;
    CharBuffer cb = inDecoder.decode(inmbb);&lt;br /&gt;
    ByteBuffer outbb = outEncoder.encode(cb);&lt;br /&gt;
    foutc.write(outbb);&lt;br /&gt;
    inraf.close();&lt;br /&gt;
    outraf.close();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>