해결된 질문
작성
·
102
0
영상 4:50부터 나오는 자료를 보면 3가지 내용이 나오는데요 이 중에서
문자열 처리 과정에서는 UTF-16BE를 Modified UTF-8로 변경해 처리
해당 내용의 이해가 헷갈려서 질문드립니다.
이전의 6-6강 문자와 인코딩 규칙 강의중 "인코딩 규칙에 대한 모든 것" 유튜브 영상을 권해주셔서 보고 검색도 해보니
유니코드 문자중 한자와 한글은 UTF-8에서 3바이트로 변환된다는 것으로 정리가 되었고, 위와 같은 문자/문자열의 입출력시 JVM의 I/O 버퍼에서는 1바이트씩 3개 단위로 끊어서 들어가며, JVM 내부에서는 UTF-16BE로 저장 및 처리가 된다는 것으로 이해했습니다.
그런데 그렇다면 Modified UTF-8은 어떤 용도로 나온건가 싶어, GPT에 물어보고 해보니 아래 사진과 같은 상황에서는 UTF-8쓰고, 또 어떨때는 Modified UTF-8을 쓴다 하더군요
즉, Modified UTF-8 뿐만 아니라 UTF-8로도 인코딩 하는 것 같은데, 서론의 강의 내용처럼 "Modified UTF-8로 변경해 처리한다" 로만 이해해도 충분할까요?
말씀하신대로 핵심 내용은 "데이터의 입출력 과정에서 인코딩이 일어난다"는 내용인데, 이해의 과정에서 저 부분이 계속 헷갈려서 질문드립니다.
답변 2
1
네, 그 정도로도 충분할 것 같습니다. 내부가 그렇게 작동한다는 특성을 알고 있어야 어떤 특이 현상을 경험했을 때 문제를 해결하는 능력을 얻을 수 있으니까요. 😄
0
안녕하세요, 인프런 AI 인턴입니다. Kwon님, 질문에 대한 답변을 드리겠습니다.
Modified UTF-8은 주로 자바의 특정 환경에서 사용되는 인코딩 방식으로, 특히 자바의 Internal Representation
에서 나타납니다. 즉, 자바는 많은 경우에 UTF-16BE를 사용하여 문자열을 메모리에 저장하고, 특정 상황(예: JVM 내부, JNI에서의 데이터 처리 등)에서는 Modified UTF-8로 변환하여 처리하게 됩니다.
기본적으로 자바에서 문자열은 메모리 내부적으로 UTF-16BE로 저장되지만, 자바의 다양한 시스템 구성 요소 간의 데이터 교환 시, Modified UTF-8이 사용될 수 있습니다. Modified UTF-8은 일반적인 UTF-8과는 다르게 null terminator와 같은 추가적인 호환성을 위해 약간의 수정이 있는 방식입니다. 이와 관련하여 요소들이 서로 데이터를 주고받을 때 이러한 인코딩이 사용됩니다.
위의 이미지에서 설명한 것처럼, JNI(Native Code)에서의 레거시 호환성 및 클래스 파일 내부 상수 등을 처리할 때 Modified UTF-8을 사용합니다. 반면, 일반 파일이나 네트워크 I/O에서는 국제적인 표준과의 호환성을 위해 일반 UTF-8을 사용하는 경우가 많습니다.
따라서, 강의에서 말한 “Modified UTF-8로 처리한다”라는 내용은 JVM 내부의 특정 처리 과정에서의 얘기라는 점을 염두해 두셔야 합니다. 따라서 모든 경우에 Modified UTF-8만 사용하는 것은 아니며, 상황에 따라 UTF-8과 번갈아가며 사용될 수 있습니다.
좀 더 세부적인 내용을 확인하고 싶다면, 관련 링크(문자를 다루는 인코딩 규칙에 대한 모든 것!)에서 추가 설명을 확인하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.