Java가 내부 문자열 표현에 UTF-16을 사용하는 이유는 무엇입니까?


29

이유는 색인에서 문자에 대한 액세스와 같은 빠른 배열이라고 생각하지만 일부 문자는 16 비트에 맞지 않으므로 작동하지 않습니다 ...

어쨌든 특별한 경우를 처리해야한다면 UTF-8을 사용하는 것이 어떻습니까?


4
커뮤니티가 아닌 Java 디자이너에게 물어볼 것이 있습니다. 건설적이지 않은 것으로 닫는 투표.
Oded

16
@Oded : DeadMG의 답변에서 알 수 있듯이 절대적으로 보증되지 않습니다.
Michael Borgwardt

I이었다 : 나는 혼동하고있어 확실이 질문은 이미 (모두 여기 SO)에 응답 한 것을,하지만 난 중복을 (를) 찾을 수 없습니다.
Joachim Sauer

히스테리 건포도 utf8everywhere.org 참조
Pavel Radzivilovsky

답변:


47

UCS-2 였기 때문에 고정 길이 16 비트가 좋았습니다. 물론 16 비트는 충분하지 않은 것으로 판명되었습니다. 그들은 위에 UTF-16을 개조했습니다.


6
여기에서 인용 한 것입니다 유니 자주 묻는 질문 : Originally, Unicode was designed as a pure 16-bit encoding, aimed at representing all modern scripts. (Ancient scripts were to be represented with private-use characters.) Over time, and especially after the addition of over 14,500 composite characters for compatibility with legacy sets, it became clear that 16-bits were not sufficient for the user community. Out of this arose UTF-16.자바 릴리스 UTF-16의 시점에서 아직 등장하지, 그리고 UTF-8은 유니 코드 표준의 일부가 아니 었습니다.
Malcolm

20
UCS-2는 전문 용어이며 전문 용어가 아닙니다.
DeadMG

14

평범하고 단순한 미래 보장을 위해 주요 부분. 잘못 된 이유인지 여부와 잘못된 방법은 다른 질문입니다.

이 문서에서 2004 년 Java 5 및 UTF-16으로의 전환에 대한 일부 설계 결정의 일부 이유를 확인할 수 있습니다. 여기에는 몇 가지 단점도 설명되어 있습니다. Java 플랫폼의 보조 문자Java 에코 시스템이 사용되는 이유를 참조하십시오. 스택 전체에서 다른 인코딩? .

UTF-16 사용의 함정과 UTF-8이 일반적으로 더 나은 옵션 인 이유에 대한 자세한 내용은 UTF-16을 유해한 것으로 간주해야합니까?를 참조하십시오 . 그리고 UTF-8 어디에나 선언.


8
"UTF-16을 유해한 것으로 간주해야합니까?"링크에 +1 의문. 나는 최근에 UTF-8 Everywhere 선언문을 발견했으며 지금은 완전히 확신한다고 생각합니다. 가치가있는 것은 Java가 잘못했지만 Windows가 훨씬 더 나쁘다는 것을 확신합니다.
Daniel Pryden

5
Windows가 더 잘못 했다는 것은 놀라운 일이 아닙니다. 일찍 유니 코드로 전환했기 때문에 올바른 선택과 경험이 적었습니다. Java는 나중에 얻었고 더 잘 얻었 지만 여전히 다소 잘못되었습니다. 이제 둘 다 계속 지원해야하는 오래되고 잘못된 일반 감지 API를 사용해야합니다.
Joachim Sauer

4
그것은 소프트웨어 세계에서의 삶입니다. 모든 데이터를 가지지 않고 선택해야합니다. :-)
Brian Knoblauch

2
실제 문자를 포함하는 "일반"배열에 대한 참조를 보유하는 "일반"클래스가 아닌 stringJava에서 "특별한"유형 을 만드는 것이 성능에 어떤 영향을 미쳤는지 궁금 합니다. 문자열이 생성되는 방식에 따라 UTF-8, UTF-16 또는 심지어 UTF-32가 문자열을 저장하는 가장 효율적인 방법 일 수 있습니다. "일반"클래스 가 여러 형식을 처리 하는 데 특히 효율적인 방법은 없다고 생각 하지만 JVM을 지원하는 "특별한"유형은 가능합니다. ArrayStringString
supercat

@ supercat : 정확한 답변이 없지만 관련 SO 답변 이 있습니다. :) 실제로 특수 유형 접근 방식을 다루지는 않지만 간소화 된 문자열을 갖는 잠재적 이점에 대해 설명합니다.
haylem
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.