자바 문자열 상수 인코딩 문제

mykldp의 이미지

저는 자바의 String literal 이 자바의 내부 코드로 변환되어 저장ㅤㄷㅚㅆ다가 출력될때에는 시스템 인코딩으로 변환되어 출력되는것으로 알았는데 아닌것 같군요.

윈도에서 작성한 소스코드에 "한글" 이라는 문자열 상수가 들어있습니다. 윈도 cmd 에서 출력하면 "한글" 이라고 나옵니다. 컴파일된 클래스를 UTF-8 이 시스템 인코딩인 페도라에서 실행시키니 깨져서 나옵니다. 실행시에 인코딩을 "EUC-KR" 로 해주니 제대로 출력되는군요. 윈도에서 소스를 UTF-8 로 작성하고 컴파일시에 소스 인코딩 옵션을 주니 페도라에서 제대로 나옵니다. 대신 이경우에는 윈도 cmd 에서 깨지는군요.

일단은 문자열 상수를 전부 별도의 파일로 만들어 UTF-8 로 저장하고 런타임에 이 파일을 읽어 인코딩을 변환하는 방법을 써서 해결했습니다. 자바의 ResourceBundle 을 사용하는 방법도 고려해봤는데 왠지 번잡스럽게 느껴지는군요. ResourceBundle 을 효과적으로 사용하는 방법을 잘 몰라서 그러는 것도 같습니다.

여하튼 이런 문제를 어떻게 해결하고 계시는지 듣고 싶습니다.

jeweljar의 이미지

제가 테스트해본 바에 의하면
UTF-8로 작성된 소스를 UTF-8로 컴파일한 클래스 바이너리와,
EUC-KR로 작성된 소스를 EUC-KR로 컴파일한 클래스 바이너리는 동일합니다.
따라서, 알고 계신대로 String literal이 자바 내부 코드로 변환되어 저장되는게 맞습니다.
(사실, 자바 API 내부에는 iconv() 와 같은 역할을 하기 위해 엄청 많은 문자셋 맵이 들어있습니다.)

아마도 추측건대
페도라에 ZTerm이나 PineTerm 같은 터미널 프로그램으로 접속하셔서
결과를 보신게 아닌가 싶네요.
그 터미널 프로그램이 EUC-KR 문자만을 출력하도록 되어있는건 아닌지요??

암튼, 자바의 문자는 모두 유니코드로 저장되어
런타임시 시스템의 인코딩으로 자동 변환됩니다.
(물론 코드상에서 특정 인코딩을 사용하도록 강제한 경우는 빼고요..)
다른 부분에서 문제가 있는건 아닌지 한번 확인해보세요~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.