5-3.(1) FileEncoding

zhyun·2020년 9월 26일
0

HighJava

목록 보기
46/67
post-custom-banner

p.54

1. 한글인코딩

  • InputStreame객체는 파일의 인코딩 방시글 지정 가능
  • 형식) new InputStreamReader(바이트기반 스트림 객체, 인코딩 방식);

2. 인코딩 방식

  • 한글 인코딩 방식은 크게 UTF-8 & EUC-KR 두가지
  • 원래 한글 윈도우는 CP949방식 사용
  • 윈도우 개발한 마이크로소프트에서 EUC-KR로 확장하였기 때문에
    MS949로 부름
  • CP949는 EUC-KR의 확장이며, 하위호환성
  • ANSI는 영어를 표기하기 위해 만든 코드 규격으로 자체에 한글이 없다가
    나중에 EUC-KR(유닉스 계열), CP949(윈도우)이라는 식으로 한글이 포함됨.

MS949

  • 윈도우의 기본 한글 인코딩 방식(ANSI 계열)

UTF-8

  • 유니코드 UTF-8 인코딩 방식
  • 영문자 및 숫자 : 1byte, 한글 : 3byte => 가변적

US-ASCII

  • 영문전용 인코딩 방식

FileInputSream & InputStreamReader 예시

T09_FileEncodingTest

  • FileInputStream (바이트기반스트림) 객체를 생성한 후
    이 객체를 매개변수로 받는 InputStreamReader객체를 생성한다.
  • 바이트입력스트림에 연결되어 문자입력스트림인 Reader로 변환시킨다.
  • 저장한 코드와 똑같은 방식으로 읽어야 한다!!!
public class T09_FileEncodingTest {
	public static void main(String[] args) {
		//파일 인코딩을 이용하여 읽어오기
		FileInputStream fis = null; //바이트기반스트림
		InputStreamReader isr = null;//문자기반스트림
		
		try {
        		fis = new FileInputStream("d:/D_Other/test_utf8.txt");
			//fis = new FileInputStream("d:/D_Other/test_ansi.txt");
//			isr = new InputStreamReader(fis, "cp949"); //cp949방식으로 읽어보기
			isr = new InputStreamReader(fis, "UTF-8");
//			isr = new InputStreamReader(fis, "MS949");
//			isr = new InputStreamReader(fis, "EUC-KR");
			
            		int c;
			
			while((c=isr.read())!=-1) {
				System.out.print((char)c);
			}
			
			System.out.println();
			System.out.println("출력 끝...");
			
			isr.close();//보조스트림 닫으면 기반스트림 닫고 보조스트림 닫는다. 
			//fis.close(); 굳이 안해줘도 된다.
		}catch(IOException ex) {
			ex.printStackTrace();
		}
	}
}
  • ansi방식
    : cp949, MS949, EUC-KR 방식 다 읽혀짐

  • UTF-8 방식
    : UTF-8 방식으로만 읽힘

OutputStreamWriter & InputStreamReader 예시

OutputStreamWriter

  • OutputStream(바이트기반 출력 객체)를 Writer(문자기반의 출력용객체)로 변환해주는 객체
    이 객체도 출력할 때 '인코딩방식'을 지정해서 출력 가능

T10_FileEncodingTest

public class T10_FileEncodingTest {
	public static void main(String[] args) throws IOException {
    	//키보드로 입력한 내용을 파일로 저장하는데 
		//out_utf8.txt 파일은 'utf-8'인코딩 방식으로,
		//out_ansi.txt 파일은 'ms949'인코딩 방식으로 저장한다.
		
		InputStreamReader isr = new InputStreamReader(System.in); //문자기반
		
		//파일 출력용
		FileOutputStream fos1 = new FileOutputStream("d:/D_Other/out_utf8.txt");//바이트기반
		FileOutputStream fos2 = new FileOutputStream("d:/D_Other/out_ansi.txt");
		
		OutputStreamWriter osw1 = new OutputStreamWriter(fos1, "utf-8"); //문자기반
		OutputStreamWriter osw2 = new OutputStreamWriter(fos2, "ms949");
		
		int c;
		
		System.out.println("아무거나 입력하라");
		
		while((c=isr.read())!=-1) {
			osw1.write(c);
			osw2.write(c);
		}
		System.out.println("작업 완료...");
		
		isr.close();
		osw1.close();
		osw2.close();
	}
}
profile
HI :)
post-custom-banner

0개의 댓글