Wednesday, September 13, 2006
[자바/Java] 유니코드 소스 파일 인코딩 인식시키기 - UTF-8 UTF-16 Unicode
자바 소스 파일(Java Source File)을 유니코드로 작성하면, 자바가 인코딩을 자동으로 인식하지 못합니다.
-encoding
자바 컴파일러에 위와 같은 옵션을 준 후, 한 칸 띄우고 인코딩 이름을 적어 주어야 합니다.
UTF-8 유니코드의 경우
javac -encoding UTF-8 Foo.java && java Foo
(utf8 로도 인식하더군요. 인터넷 웹문서용 유니코드는 UTF-8 이 표준입니다.)
UTF-16LE 유니코드의 경우
javac -encoding UTF-16LE Foo.java && java Foo
(MS윈도우에서는 UTF-16LE 유니코드가 사용됩니다.)
UTF-16BE 유니코드의 경우
javac -encoding UTF-16BE Foo.java && java Foo
(자바 가상머신은, 내부적으로 UTF-16BE 를 사용합니다.)
유니코드가 아닌, 한글 완성형의 경우
javac -encoding euc-kr Foo.java && java Foo
또는
javac -encoding 949 Foo.java && java Foo
(대문자로 EUC-KR 이렇게 적어도 되고, cp949, MS949 등을 사용해도 인식했습니다.) 한글 윈도우에서는 한글 완성형 인코딩이 기본이기에 지정해 줄 필요 없습니다.
중요 업데이트: 자바에서 한글 완성형 인코딩을 명시적으로 지정해 줄 때는 반드시 MS949 인코딩을 사용해야 "똠방각하" 등의 확장완성형이 표현됩니다.
참고로 위에서, && java Foo 이런 부분은. 컴파일과 실행을 동시에 하기 위해 편의상 붙인 것입니다: ▶▶ 자바 팁] 자바(Java)컴파일과 실행을 한꺼번에 하는 명령, 윈도우에서 - Java Tip: Quick Compile
유니코드에는 파일의 맨앞에, 보이지 않는 어떤 표시를 해두는데 그런 것을 BOM이라고 합니다. 자바는 BOM이 있는 유니코드는 전혀 인식하지 못하더군요. BOM을 잘못된 글자/깨진 글자쯤으로 오해했습니다. (▶▶ [QnA] 유니코드 (Unicode) 의 BOM (Byte Order Mark) 이란? 참고)
가령 BOM이 있는 유니코드(utf8) 소스에서는
illegal character: \65279
이런 에러가 났습니다. 텍스트 편집기의 File > Save As, 에서 BOM 이 없는 유니코드로 변환해 주면 문제가 해결됩니다.
▶▶ 자바Java] 유니코드(UTF-8) 파일 출력, 유니코드 텍스트 파일 만들기: Unicode Output
▶▶ 자바(Java)가 지원하는 모든 인코딩 종류/이름 목록 보기: Java Supported Encodings
업데이트:
그런데 지금 다시
javac -encoding UTF-16 Foo.java
이런 식으로 컴파일을 해보니 UTF-16의 BOM 은 인식을 하는군요
업데이트
자바(Java)에서, cp949 나 euc-kr 로 인코딩을 지정하면, "똠방각하" 등이 표현되지 않습니다. 즉 "그냥 완성형"인 것입니다.
따라서 자바에서 똠방각하 등을 제대로 표현하기 위해서는, MS949 인코딩 즉 "한글 확장 완성형"을 사용해야 합니다.
▶▶ Java/자바] 한글 확장 완성형; MS949 / cp949 인코딩(Encoding) 문제 해결
-encoding
자바 컴파일러에 위와 같은 옵션을 준 후, 한 칸 띄우고 인코딩 이름을 적어 주어야 합니다.
UTF-8 유니코드의 경우
javac -encoding UTF-8 Foo.java && java Foo
(utf8 로도 인식하더군요. 인터넷 웹문서용 유니코드는 UTF-8 이 표준입니다.)
UTF-16LE 유니코드의 경우
javac -encoding UTF-16LE Foo.java && java Foo
(MS윈도우에서는 UTF-16LE 유니코드가 사용됩니다.)
UTF-16BE 유니코드의 경우
javac -encoding UTF-16BE Foo.java && java Foo
(자바 가상머신은, 내부적으로 UTF-16BE 를 사용합니다.)
유니코드가 아닌, 한글 완성형의 경우
javac -encoding euc-kr Foo.java && java Foo
또는
javac -encoding 949 Foo.java && java Foo
(대문자로 EUC-KR 이렇게 적어도 되고, cp949, MS949 등을 사용해도 인식했습니다.) 한글 윈도우에서는 한글 완성형 인코딩이 기본이기에 지정해 줄 필요 없습니다.
중요 업데이트: 자바에서 한글 완성형 인코딩을 명시적으로 지정해 줄 때는 반드시 MS949 인코딩을 사용해야 "똠방각하" 등의 확장완성형이 표현됩니다.
참고로 위에서, && java Foo 이런 부분은. 컴파일과 실행을 동시에 하기 위해 편의상 붙인 것입니다: ▶▶ 자바 팁] 자바(Java)컴파일과 실행을 한꺼번에 하는 명령, 윈도우에서 - Java Tip: Quick Compile
유니코드 BOM 을 인식 못하는 문제
유니코드에는 파일의 맨앞에, 보이지 않는 어떤 표시를 해두는데 그런 것을 BOM이라고 합니다. 자바는 BOM이 있는 유니코드는 전혀 인식하지 못하더군요. BOM을 잘못된 글자/깨진 글자쯤으로 오해했습니다. (▶▶ [QnA] 유니코드 (Unicode) 의 BOM (Byte Order Mark) 이란? 참고)
가령 BOM이 있는 유니코드(utf8) 소스에서는
illegal character: \65279
이런 에러가 났습니다. 텍스트 편집기의 File > Save As, 에서 BOM 이 없는 유니코드로 변환해 주면 문제가 해결됩니다.
▶▶ 자바Java] 유니코드(UTF-8) 파일 출력, 유니코드 텍스트 파일 만들기: Unicode Output
▶▶ 자바(Java)가 지원하는 모든 인코딩 종류/이름 목록 보기: Java Supported Encodings
업데이트:
그런데 지금 다시
javac -encoding UTF-16 Foo.java
이런 식으로 컴파일을 해보니 UTF-16의 BOM 은 인식을 하는군요
업데이트
자바(Java)에서, cp949 나 euc-kr 로 인코딩을 지정하면, "똠방각하" 등이 표현되지 않습니다. 즉 "그냥 완성형"인 것입니다.
따라서 자바에서 똠방각하 등을 제대로 표현하기 위해서는, MS949 인코딩 즉 "한글 확장 완성형"을 사용해야 합니다.
▶▶ Java/자바] 한글 확장 완성형; MS949 / cp949 인코딩(Encoding) 문제 해결
tag: java
자바 | Java
<< Home