http://khacademy.96.lt/wp/java/java-character-set의-이해


오늘 하루종일 삽질 하면서 테스트한 결과를 요약 하자면 다음과 같다.

위의 링크의 블로그의 코드가 큰 도움이 되었다.

  • String에 저장되는 코드는 유니코드이다.
  • 이 유니코드를 다른 코드로 내보낼때 사용하는것이 .getByte("EUC-KR") 같은 코드이다.
  • 만약 이클립스 인코딩이 UTF-8인경우 FileInputStream으로 EUC-KR을 읽어서 String으로 바로 저장을 하게되면 EUC-KR의 코드를 UTF-8로 생각하여 유니코드로 변환되어 저장되므로 이 데이터는 다른 코드로 변환이 불가능해진다.
  • 각기 다른 인코딩의 파일을 읽어야 한다면 byte 배열로 읽어들인 이후에 인코딩을 지정해야만 한다.


public class FileRead {
    public static void main(String[] args) {
        System.out.println("InputStream으로 읽기");
        System.out.println(new String(readFile2("utf8.txt")));
        System.out.println("utf8.txt -- 읽기완료");

        System.out.println(new String(readFile2("ansi.txt")));
        System.out.println("ansi.txt -- 읽기완료");

        try {
            System.out.println(new String(readFile2("ansi.txt"),"euc-kr"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        System.out.println("ansi.txt -- 읽기완료");
    }

   public static byte[] readFile2(String fileName){
        FileInputStream fis=null;
        byte[] data = null;
        try {
            fis = new FileInputStream(fileName);
            data = new byte[fis.available()];
            fis.read(data);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try{
                if(fis!=null) fis.close();
            }catch(IOException e){ ; }
        }
        return data;
    }

}


'지식창고 > Java' 카테고리의 다른 글

이클립스 컬러테마 문제  (0) 2014.11.26
Sparkjava 와 Gradle 그리고 배포  (0) 2014.09.29
mybatis procedure 삽질  (0) 2014.08.28
Java Resize Library Test  (0) 2014.08.09
eclipse aptana git 문제  (0) 2014.05.29