컴퓨터 의 인 코딩 문 제 를 늘 이야기 하 다.
컴퓨터 는 숫자 만 처리 할 수 있 기 때문에 텍스트 를 처리 하려 면 먼저 텍스트 를 숫자 로 변환 해 야 처리 할 수 있다.최초의 컴퓨터 는 디자인 할 때 8 개의 비트(bit)를 하나의 바이트(byte)로 사 용 했 기 때문에 한 바이트 가 표시 할 수 있 는 가장 큰 정 수 는 255(2 진법 11111111=10 진법 255)이 고 더 큰 정 수 를 표시 하려 면 더 많은 바이트 를 사용 해 야 한다.예 를 들 어 두 바이트 가 표시 할 수 있 는 최대 정 수 는 65535 이 고 4 바이트 가 표시 할 수 있 는 최대 정 수 는 4294967295 이다.
현재 자주 사용 되 는 인 코딩
ASCII 인 코딩:컴퓨터 는 미국인 이 발명 한 것 이기 때문에 최초 로 127 개의 자모 만 컴퓨터 에 인 코딩 되 었 다.즉,대소 문자 영문 자모,숫자 와 일부 기호 이다.이 인 코딩 표 는 ASCII 인 코딩 이 라 고 불 린 다.예 를 들 어 대문자 A 의 인 코딩 은 65 이 고 작은 자모 z 의 인 코딩 은 122 이다.
GB 시리즈 인 코딩:그러나 중국 어 를 처리 하려 면 한 바이트 가 부족 하고 적어도 두 바이트 가 필요 하 며 ASCII 인 코딩 과 충돌 할 수 없 기 때문에 중국 은 GB 2312 인 코딩 을 제정 하여 중국 어 를 편집 하 는 데 사용 했다.더 나 아가 전 세계 에서 백 가지 언어 가 있 는데 일본 은 일본 어 를 Shift 로 엮 었 다.JIS 에 서 는 한국 이 Euc-kr 에 한글 을 엮 어 각국 의 기준 이 있 으 면 충돌 이 불가피 하 게 발생 하 는데,결과적으로 다 국어 가 혼 합 된 텍스트 에 난 코드 가 표 시 될 수 있다 는 것 이다.GB 시리즈 인 코딩 은 한 자 를 저장 하 는 데 사용 되 는 우리 나라 의 국가 표준 인 코딩 으로 GB 2312,GBK,GB 18030 으로 나 뉘 어 기본적으로 앞으로 호 환 될 수 있 으 며 그 중에서 GBK 는 현재 가장 통용 되 고 있다.
유 니 코드 인 코딩:유 니 코드 는 모든 언어 를 하나의 인 코딩 으로 통일 시 켜 더 이상 어 지 러 운 문제 가 없 도록 합 니 다.유 니 코드 표준 도 계속 발전 하고 있 지만 가장 많이 사용 되 는 것 은 두 바이트 로 한 문 자 를 표시 하 는 것 이다(매우 외 진 문 자 를 사용 하려 면 4 바이트 가 필요 하 다).현대 운영 체제 와 대부분의 프로 그래 밍 언어 는 유 니 코드 를 직접 지원 한다.그러나 그 는 문자 의 인 코딩 만 규정 하고 문자 가 어떤 방식 으로 저장 되 거나 전송 되 는 지 는 규정 하지 않 았 다.그래서 UTF 시리즈 인 코딩 은 유 니 코드 인 코딩 의 저장 과 전송 방식 을 규정 합 니 다.
UTF 인 코딩 시리즈:현재 가장 많이 사용 되 는 UTF 인 코딩 은 3 가지 로 나 뉘 는데 UTF-8,UTF-16 과 UTF-32 이다.우 리 는 컴퓨터 가 8 비트 를 하나의 바이트 로 데 이 터 를 저장 하 는 것 을 알 고 있 고 UTF-16,UTF-32 는 각각 2 바이트 와 4 바이트 로 한 문 자 를 표시 하기 때문에 바이트 의 저장 순서 와 관련 되 는데 낮은 비트 가 앞 에 있 는 지 높 은 비트 가 앞 에 있 는 지 이렇게 해서 BOM 이 생 겼 다.
BOM 은 텍스트 파일 의 시작 부분 에 있 는 특수 한 태그 로 특수 한 숫자 로 텍스트 파일 의 바이트 순 서 를 표시 합 니 다.UTF-8 바이트 순 서 는 정 해 져 있 지만,UTF-16 과 UTF-32 를 호 환 하기 위해 UTF-8 인 코딩 을 표시 하 는 데 사용 할 수 있 도록 UTF-8 의 BOM 도 규정 했다.다만 UTF-8 의 BOM 은 플랫폼 별로 규정 이 다 르 니 조심해 서 사용 해 야 한다.
BOM 규정 은 다음 과 같다.
UTF-8 EF BB BF
UTF-16(LE) FF FE
UTF-16(BE) FE FF
UTF-32(LE) FF FE 00 00
UTF-32(BE) 00 00 FE FF
UTF-8 인 코딩:유 니 코드 인 코딩 으로 통일 되면 인 코딩 문제 가 사라 집 니 다.그러나 당신 이 쓴 텍스트 가 기본적으로 모두 영어 라면 유 니 코드 인 코딩 으로 ASCII 인 코딩 보다 두 배 이상 의 저장 공간 이 필요 하 며 저장 과 전송 에 있어 서 는 매우 수지 가 맞지 않 습 니 다.그래서 절약 정신 에 따라 유 니 코드 인 코딩 을'가 변 길이 인 코딩'으로 바 꾸 는 UTF-8 인 코딩 도 등장 했다.UTF-8 인 코딩 은 하나의 유 니 코드 문 자 를 숫자 크기 에 따라 1-6 개의 바이트 로 인 코딩 하고,자주 사용 하 는 영문 자 모 는 1 개의 바이트 로 인 코딩 하 며,한 자 는 보통 3 개의 바이트 이 며,매우 생소 한 문자 만 4-6 개의 바이트 로 인 코딩 된다.전송 할 텍스트 에 영문 문자 가 많이 포함 되 어 있다 면 UTF-8 인 코딩 으로 공간 을 절약 할 수 있 습 니 다.
문자
ASCII
Unicode
UTF-8
A
01000001
00000000 01000001
01000001
중.
X
01001110 00101101
11100100 10111000 10101101
2.컴퓨터 시스템 의 인 코딩 응용
컴퓨터 메모리 에서 유 니 코드 인 코딩 을 통일 적 으로 사용 하고 하 드 디스크 에 저장 하거나 전송 이 필요 할 때 UTF-8 인 코딩 으로 변환 합 니 다.메모 장 으로 편집 할 때 파일 에서 읽 은 UTF-8 문 자 를 메모리 로 변환 하고 편집 이 완료 되면 저장 할 때 유 니 코드 를 UTF-8 로 변환 하여 파일 에 저장 합 니 다.
웹 페이지 를 탐색 할 때 서버 는 동적 으로 생 성 된 유 니 코드 내용 을 UTF-8 로 변환 하여 브 라 우 저 로 전송합니다.
그래서 많은 웹 페이지 의 원본 코드 에와 유사 한 정보 가 있 는 것 을 보면 이 웹 페이지 가 바로 UTF-8 인 코딩 을 사용 하고 있 음 을 나타 낸다.
질문
eclipse 에서 자바 프로젝트 의 인 코딩 이 어떤 지 demo 를 직접 써 보 세 요.
1.문자열 이 바이트 시퀀스 로 전환
public class EncodeDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s=" de ";
byte[] bytes1=s.getBytes();// ,
for(byte b: bytes1)
//toHexString ( Int) 16
System.out.print(Integer.toHexString(b & 0xff)+" ");// & 0xff 24 0
}
}
실행 결과:분석:이 자바 프로젝트 의 기본 인 코딩 에서 한 자 는 2 개의 바이트 로 표시 하고 영 어 는 하나의 바이트 로 표시 하 는 것 을 볼 수 있 습 니 다.
항목 을 보 는 기본 인 코딩 은GBK 입 니 다.
프로젝트 의 기본 인 코딩 형식 을 사용 하지 않 으 려 면 다음 방법 으로 문자열 을 원 하 는 인 코딩 형식 으로 지정 할 수 있 습 니 다.
byte[] bytes2=s.getBytes("utf-8");// utf-8
for(byte b: bytes2)
//toHexString ( Int) 16
System.out.print(Integer.toHexString(b & 0xff)+" ");// & 0xff 24 0
System.out.println();
byte[] bytes3=s.getBytes("utf-16be");// java ,utf-16be
for(byte b: bytes3)
//toHexString ( Int) 16
System.out.print(Integer.toHexString(b & 0xff)+" ");// & 0xff 24 0
실행 결과:분석:두 가지 결 과 를 비교 해 보면 알 수 있다.
gbk 인 코딩:중국 어 는 두 개의 바이트 를 차지 하고 영 어 는 한 개의 바이트 를 차지한다.
utf-8 인 코딩:중국 어 는 세 개의 바이트 를 차지 하고 영 어 는 한 개의 바이트 를 차지한다.
utf-16be 인 코딩:중국 어 는 두 개의 바이트 를 차지 하고 영 어 는 두 개의 바이트 를 차지한다.
메모:자 바 는 쌍 바이트 인 코딩 이 고 utf-16be 인 코딩 입 니 다.즉 자바 의 한 글자(char)가 두 바이트 를 차지 합 니 다!
2.바이트 시퀀스 에서 문자열 로 전환
바이트 시퀀스 가 어떤 인 코딩 일 때,이 럴 때 바이트 시퀀스 를 문자열 로 바 꾸 려 면 이런 인 코딩 방식 을 사용 해 야 합 니 다.그렇지 않 으 면 오류 가 발생 할 수 있 습 니 다.
String str1=new String(bytes1);// ,
System.out.println(str1);
String str2=new String(bytes2);
System.out.println(str2);
String str3=new String(bytes2,"utf-8");
System.out.println(str3);
실행 결과:4.텍스트 파일(txt)의 인 코딩 문제
텍스트 파일 은 바이트 시퀀스 로 임의의 인 코딩 바이트 시퀀스 일 수 있 습 니 다.
만약 에 우리 가 중국어 기기 에서 텍스트 파일 을 직접 만 들 면 이 파일 은 ANSI 인 코딩 만 알 고 있 습 니 다(예 를 들 어 컴퓨터 에서 오른쪽 단 추 를 누 르 면 텍스트 파일 을 만 듭 니 다).
여기 서 주의해 야 할 것 은 텍스트 파일 을 직접 만 들 때 만 이 파일 의 인 코딩 은 ANSI 만 알 지만 텍스트 파일 자 체 는 임의의 인 코딩 을 넣 을 수 있 는 바이트 시퀀스 입 니 다.
메모:중국어 시스템 에서 ANSI 인 코딩 은 GBK 인 코딩 입 니 다.
여기 예 를 들 면:
eclipse 에 새 항목 을 만 들 고 기본 인 코딩 을 utf-8 로 바 꿉 니 다.
이 항목 에 대해 서 는 utf-8 인 코딩 파일 만 알 고 있 습 니 다.
다음은 이 항목 에 텍스트 파일 utf-8.txt 를 새로 만 들 고 다음 과 같은 내용 을 입력 하 십시오.
이 텍스트 파일 을 다른 항목 으로 직접 복사 하면(기본 값 은 GBK 인 코딩)내용 이 어 지 러 워 집 니 다!코드 가 달라 서!
그러나 안에 있 는 내용 을 복사 해서 붙 여 넣 으 면 시스템 이 자동 으로 해당 하 는 인 코딩 으로 바 뀌 어 어 어 지 럽 히 지 않 는 다.
메모:이 텍스트 파일 을 다른 곳(예 를 들 어 시스템 데스크 톱)에 복사 하면 오류 가 발생 하지 않 습 니 다!!텍스트 파일 은 임의의 인 코딩 시퀀스 일 수 있 기 때문에 시스템 은 텍스트 파일 을 읽 을 때 자동 으로 해당 하 는 인 코딩 형식 으로 전 환 됩 니 다.
파일 의 인 코딩 을 알 면 무슨 소 용이 있 습 니까?자바 의 IO 흐름 에서 우 리 는 파일 을 읽 고 써 야 하 며,바이트 흐름 을 사용 하여 읽 고 쓸 때 는 서로 다른 인 코딩 방식 에 따라 읽 고 써 야 한다.서로 다른 인 코딩 방식 의 각 문자 가 차지 하 는 바이트 수가 다 르 기 때문에 우 리 는 실제 상황 에 따라 조작 해 야 한다.
이상 의 이 상투적인 컴퓨터 의 인 코딩 문제(필수 편)는 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 할 수 있 고 여러분 들 이 우 리 를 많이 지지 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[반도체 메모리] 기본 정보 기술자의 테스트에 사용되는 컴퓨터의 구조이것은'백목 선생님의 기본 정보 기술자 교실'을 참고하여 학습 내용을 총결한 문장이다. RAM(Random Access Memory)은 읽기와 쓰기가 가능한 메모리입니다.전원을 끊으면 저장된 내용이 사라지는 특성이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.