Do Not Think!!!

Posted
Filed under 01010101
자바 프로그래밍을 하다보면 다음과 같이 String을 만들때가 있습니다.

코드 보기


보통 Stream에서 String을 만들경우 이런 방법을 사용합니다.

Java API를 보면 다음과 같은 말이 나옵니다.
Constructs a new String by decoding the specified array of bytes using the platform's default charset.
간단하게 말하면, 시스템의 기본 charset을 사용해서 byte[]을 디코딩해서 String을 만든다는겁니다.

그런데, 이렇게 코딩을 하게되면 기본 charset이 다른 플랫폼 사이에서의 호환성을 잃어버리게 됩니다.

예를들면,
  • .NET에서 파일을 System.Default로 인코딩해서 저장합니다.
  • 윈도우에서 Java로 개발하면서 위와 같이 코딩을 합니다.
  • 윈도우에서 테스트할 경우에는 문제가 발생하지 않습니다. (왜냐하면, charset이 같기 때문입니다.)
  • 이 프로그램을 UTF-8로 설정된 리눅스에서 돌리면, 디코딩을 제대로 하지 못하는 문제가 발생합니다.
.NET 프로그램 -----> DB, File, Network -----> Java 프로그램(MS-Windows, Linux등에서 동작)



이런 문제를 해결하기 위해 다음과 같이 저장시 사용한 charset을 명시적으로 사용해야 합니다.

코드 보기