logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kamal Ahmed <KAh...@webMethods.com>
Subject RE: Testing log4j with UTF-16
Date Tue, 22 Aug 2006 18:57:31 GMT
Hi,
How is it possible to ignore/skip the first 2 bytes (which is 0xFEFF) "BOM"
Byte Order Mark, in the class BinaryCompare.java (as copied below)

-----------------------------
/*
 * Copyright 1999,2005 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.log4j.util;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


public final class BinaryCompare {
    /**
     * Class can not be constructed.
     */
    private BinaryCompare() {
    }

    public static boolean compare(final String file1, final String file2)
        throws FileNotFoundException, IOException {
        BufferedInputStream in1 = new BufferedInputStream(new
FileInputStream(
                    file1));
        BufferedInputStream in2 = new BufferedInputStream(new
FileInputStream(
                    file2));

        int byte1 = 0;
        int byte2 = 0;

        for (int pos = 0; byte1 != -1; pos++) {
            byte1 = in1.read();
            byte2 = in2.read();

            if (byte1 != byte2) {
                if (byte2 == -1) {
                    System.out.println("File [" + file2 +
                        "] longer than file [" + file1 + "].");
                } else if (byte1 == -1) {
                    System.out.println("File [" + file1 +
                        "] longer than file [" + file2 + "].");
                } else {
                    System.out.println("Files differ at offset " + pos + ":
[" +
                        file1 + "] has " + Integer.toHexString(byte1) + ",
[" +
                        file2 + "] has " + Integer.toHexString(byte2) +
".");
                }

                return false;
            }
        }

        return true;
    }
}
-----------------------------

-----Original Message-----
From: Kamal Ahmed [mailto:KAhmed@webmethods.com] 
Sent: Monday, August 21, 2006 5:00 PM
To: Log4J Users List
Subject: Testing log4j with UTF-16

Hi,

 

In the test EncodingTest.java, how is the UTF-16 handled, since UTF-16
appends Byte Order Mark, as below

 


 


fe ff

UTF-16 for 16-bit internal UCS-2, big endian, Java network order


ff fe

UTF-16 for 16-bit internal UCS-2, little endian, Intel/Microsoft order


00 00 fe ff

UTF-32 for 32-bit internal UCS-4, big-endian, Java network order

 

Here is the source file:

 

/*
   * Copyright 1999,2005 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.log4j;
  
  import junit.framework.TestCase;
  
  import org.apache.log4j.util.BinaryCompare;
  
  
  /**
   * Tests support for encoding specification.
   * @author Curt Arnold
   * @since 1.3
   */
  public class EncodingTest extends TestCase {
      /**
      *   Construct an instance of EncodingTest.
      * @param name test name
      */
      public EncodingTest(final String name) {
          super(name);
      }
  
      /**
       * Resets configuration after each test.
       */
      public void tearDown() {
          Logger.getRootLogger().getLoggerRepository().resetConfiguration();
      }
  
      /**
       * Test us-ascii encoding.
       * @throws Exception if test failure
       */
      public void testASCII() throws Exception {
          Logger root = Logger.getRootLogger();
          configure(root, "output/ascii.log", "US-ASCII");
          common(root);
          assertTrue(BinaryCompare.compare("output/ascii.log",
                  "witness/encoding/ascii.log"));
      }
  
      /**
       * Test iso-8859-1 encoding.
       * @throws Exception if test failure
       */
      public void testLatin1() throws Exception {
          Logger root = Logger.getRootLogger();
          configure(root, "output/latin1.log", "iso-8859-1");
          common(root);
          assertTrue(BinaryCompare.compare("output/latin1.log",
                  "witness/encoding/latin1.log"));
      }
  
      /**
       * Test utf-8 encoding.
       * @throws Exception if test failure.
       */
      public void testUtf8() throws Exception {
          Logger root = Logger.getRootLogger();
          configure(root, "output/UTF-8.log", "UTF-8");
          common(root);
          assertTrue(BinaryCompare.compare("output/UTF-8.log",
                  "witness/encoding/UTF-8.log"));
      }
  
      /**
       * Test utf-16 encoding.
       * @throws Exception if test failure.
       */
      public void testUtf16() throws Exception {
          Logger root = Logger.getRootLogger();
          configure(root, "output/UTF-16.log", "UTF-16");
          common(root);
          assertTrue(BinaryCompare.compare("output/UTF-16.log",
                  "witness/encoding/UTF-16.log"));
      }
  
      /**
       * Test utf-16be encoding.
       * @throws Exception if test failure.
       */
      public void testUtf16BE() throws Exception {
          Logger root = Logger.getRootLogger();
          configure(root, "output/UTF-16BE.log", "UTF-16BE");
          common(root);
          assertTrue(BinaryCompare.compare("output/UTF-16BE.log",
                  "witness/encoding/UTF-16BE.log"));
      }
  
      /**
       * Test utf16-le encoding.
       * @throws Exception if test failure.
       */
      public void testUtf16LE() throws Exception {
          Logger root = Logger.getRootLogger();
          configure(root, "output/UTF-16LE.log", "UTF-16LE");
          common(root);
          assertTrue(BinaryCompare.compare("output/UTF-16LE.log",
                  "witness/encoding/UTF-16LE.log"));
      }
  
      /**
       * Configure logging.
       * @param logger logger
       * @param filename logging file name
       * @param encoding encoding
       */
      private void configure(final Logger logger, final String filename,
          final String encoding) {
          PatternLayout layout = new PatternLayout();
          layout.setConversionPattern("%p - %m\\n");
          layout.activateOptions();
  
          FileAppender appender = new FileAppender();
          appender.setFile(filename);
          appender.setEncoding(encoding);
          appender.setAppend(false);
          appender.setLayout(layout);
          appender.activateOptions();
          logger.addAppender(appender);
          logger.setLevel(Level.INFO);
      }
  
      /**
       * Common logging requests.
       * @param logger logger
       */
      private void common(final Logger logger) {
          logger.info("Hello, World");
  
          // pi can be encoded in iso-8859-1
          logger.info("\u00b9");
  
          //  one each from Latin, Arabic, Armenian, Bengali, CJK and
Cyrillic
          logger.info("A\u0605\u0530\u0986\u4E03\u0400");
      }
  }

 


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Mime
View raw message