1. 서문
비교 및 비교기를 분석 할 때, 문자열 클래스의 비교 방법을 분석 하였다. 기본 문자열은 char [] 배열을 사용하여 요소를 저장합니다. 비교할 때 두 줄의 문자를 비교하고 문자는 숯으로 저장됩니다. 이때, 나는 갑자기 자바에서 중국어를 저장할 수 있다고 생각 했습니까? 나중에 나는 그것이 괜찮다는 것을 알았고, 이것은 또한 Java의 인코딩 형식의 문자로 이어집니다.
2. Java 스토리지 형식
Java에서 다음 코드는 문자 'Zhang'의 다양한 인코딩 형식을 얻습니다.
import java.io.unsupportedEncodingException; public class test {public static string getCode (문자열 내용, 문자열 형식) 던지기 unsupportedEncodingException {byte [] bytes = content.getBytes (format); StringBuffer sb = new StringBuffer (); for (int i = 0; i <bytes.length; i ++) {sb.append (integer.tohexstring (bytes [i] & 0xff) .touppercase ()+""); } return sb.toString (); } public static void main (String [] args)은 UnsupportedEncodingException {System.out.println ( "gbk :" + getCode ( "Zhang", "GBK")); System.out.println ( "GB2312 :" + getCode ( "Zhang", "GB2312")); System.out.println ( "ISO-8859-1 :" + getCode ( "Zhang", "ISO-8859-1"); System.out.println ( "유니 코드 :" + getCode ( "Zhang", "unicode")); System.out.println ( "UTF-16 :" + getCode ( "Zhang", "UTF-16")); System.out.println ( "UTF-8 :" + getCode ( "Zhang", "UTF-8")); }}실행 결과 :
GBK : D5 C5 GB2312 : D5 C5 ISO-8859-1 : 3F 유니 코드 : FE FF 5F 20 UTF-16 : FE FF 5F 20 UTF-8 : E5 BC BC BC A0
참고 : 결과에서, 우리는 문자 'Zhang'의 GBK가 GB2312 인코딩과 동일하고 유니 코드는 UTF-16 인코딩과 동일하지만 ISO-8859-1, 유니 코드 및 UTF-8 인코딩은 모두 다르다는 것을 알 수 있습니다. 그렇다면 JVM에서 'Zhang'이 저장된 인코딩 형식은 무엇입니까? 아래 분석을 시작하겠습니다.
3. 비밀 아이디어를 탐구하십시오
1. .class 파일 상수 풀의 스토리지 형식보기
테스트 코드는 다음과 같습니다
공개 클래스 테스트 {public static void main (String [] args) {String str = "Zhang"; }}소환에 대한 Javap -Verbose test.class를 사용하고 지속적인 풀링 상황은 다음과 같습니다.
그런 다음 Winhex를 사용하여 클래스 파일을 열고 캐릭터 'Zhang'이 다음과 같이 상수 풀에 저장되어 있음을 찾으십시오.
참고 : 위의 두 가지는 클래스 파일에 UTF-8 형식으로 저장할 수 있습니다.
그러나 런타임에 UTF-8 형식입니까? 탐험의 여정을 계속하십시오.
2. 프로그램에서 알아보십시오
다음 코드를 사용하십시오
공개 클래스 테스트 {public static void main (String [] args) {String str = "Zhang"; System.out.println (integer.tohexstring (str.codepointat (0)). touppercase ()); }}실행 결과 :
5F20
참고 : 결과를 기반으로 런타임에 JVM은 Storage에 UTF-16 형식을 사용한다는 것을 알고 있습니다. UTF-16은 일반적으로 2 바이트로 저장됩니다. 두 바이트가 발생하면 4 바이트로 표시됩니다. 나중에 소개 할 또 다른 기사가 있습니다. 문자 클래스의 소스 코드를 확인하면 UTF-16을 사용하여 코딩 된 것으로 알 수 있으며 양쪽에서 원하는 대답을 찾았습니다.
3. 숯 유형을 중국어로 저장할 수 있습니까?
위의 탐색을 기반으로, 우리는 Java 클래스 파일의 문자가 UTF-8로 인코딩되어 JVM을 실행할 때 UTF-16에 인코딩되고 저장된다는 것을 이미 알고 있습니다. 캐릭터 'Zhang'은 2 바이트로 표시 될 수 있으며 Char는 Java의 2 바이트이므로 저장할 수 있습니다.
4. 요약
위의 분석 후, 우리는 다음을 알고 있습니다.
1. 문자는 클래스 파일에서 UTF-8 형식으로 인코딩되며 JVM을 실행할 때 UTF-16 형식으로 인코딩됩니다.
2. 숯 유형은 두 바이트이며 중국어를 저장하는 데 사용될 수 있습니다.
이 전화에서 나는 캐릭터에 대한 많은 정보를 읽었으며 많은 혜택을 얻었고 특히 흥미로웠다는 것을 알았습니다. 다음에 공유하겠습니다. 따라서 Java의 인코딩 및 인코딩 문제에 대한 간략한 소개를 드리겠습니다. 계속 지켜봐주십시오