암호를 hash 처리하는 코드(MessageDigest)를 보던중 String을 byte화, str.getBytes() 처리를 하는 코드가 있었다.
왜 굳이 바이트처리를 하는지 몰라서 찾아봤다.
-만약 DB가 한글을 지원하지 않을 경우, 한글로된 문자를 숫자로 encoding해서 저장하면되고,
사용자에게 보여줄 때는 다시 decoding해서 보여주면 된다.
- byte[] getBytes()
- byte[] getBytes(Charset charset)
- byte[] getBytes(String charsetName)
-> 문자열을 인코딩된 byte 형태로 넘겨준다. 매개 변수 없이 그냥 getBytes()메서드를 사용하면 플랫폼에 따른 default charset을 사용한다.
->만약 특정 charset을 지정할 경우 인자를 받는 getBytes()를 사용하면 된다. iso-8859-1, euc-=kr,utf-8 등의 charset 등이 존재한다. encoding과 decoding 할 때 이 charset를 맞춰서 해야한다. 그렇지 않을 경우 문자가 깨지는 현상이 발생한다.
* 인코딩 : 문자,기호,숫자데이터를 부화하
1) charset의 의미
charset = Coded Character set
컴퓨터에서 문자를 표현하기 위해, 각 문자를 정수값에 대응시켜 놓은 체계 를 의미한다.
예를 들어 euc-kr charset이라면 영숫자와 한글 그리고 일부 특수 문자와 한자들을 정수값에 대응해 놓은것이다.
euc-kr 환경에서 한글을 입력하면, 컴퓨터는 euc-kr charset에서 각 문자별로 지정한 정수값을 쓰게 된다.
2) charset이 달라진다면
각 charset 별로 표현하고자 하는 문자와 대응하는 정수값이 달라 질 수있다.
예를 들어 euc-kr은 태국문자를 위한 정수값을 정의하지 않았으므로, 태국 문자는 표현한거나 입력 할 수 없다.
그리고 euc-kr charset에 맞춰 한글로 어떤 내요을 작성하고,
이것을 iso-8859-1 charset 환경에서 열어본다면, 한글 대신 이상한 특수문자를 볼수있을 것이다.
이러한 문제로 , 문자 데이터를 교환 할때 서로 간에 charset을 일치시켜야한다.
서블릿 코딩시에 content type의 일부로 charset을 명시하는것은 웹 브라우저에게 사용하는 charset을 알려주어 오해하지 않게 하기 위해서이다.
3) 영문 OS에서 한글 표현
charset에 맞추어 문자데이터를 처리하는것은 OS나 DBMS, 미들웨어 등 플랫폼이므로 , 플랫폼에서 제공해주지 않는 charset을 사용할수 없다.
최근의 플랫폼 SW들은 다양한 charset 지원을 포함하고 있다. 만약 어떤, OS가 euc-kr모드로 작동하고 있다면, 설령 영문 OS라고 하더라도, 한글 처리에 문제가 없다고 한다.
'Etc' 카테고리의 다른 글
이클립스 프로젝트 파일 자동 새로고침 (0) | 2021.07.26 |
---|---|
Blob이란?(form : enctype) (0) | 2021.07.26 |
jdbc) Execute, ExecuteQuery, ExecuteUpdate 차이점 (0) | 2021.07.20 |
gitHub 기본 지식 (0) | 2021.07.16 |
Lombok (0) | 2021.07.16 |