Javaが内部文字列表現にUTF-16を使用するのはなぜですか?


29

理由は、インデックスの文字へのアクセスのような高速配列だったと思いますが、一部の文字は16ビットに収まらないため、機能しません...

とにかく特別なケースを処理する必要がある場合は、なぜUTF-8を使用しないのですか?


4
コミュニティ全体ではなく、Javaデザイナーに尋ねるもの。建設的でないとして閉会する投票。
Oded

16
@Oded:DeadMGの答えが示すように、まったく保証されていません。
マイケルボルグワード

私がいた:私は混乱しているかなり確かにこの質問が既に(両方ともこことSOの)答えたことが、私は、重複(複数可)を見つけることができません。
ヨアヒムザウアー

ヒステリックなレーズン用。utf8everywhere.org
Pavel Radzivilovsky

回答:


47

以前はUCS-2でしたが、これは素晴らしい固定長の16ビットでした。もちろん、16ビットでは不十分であることが判明しました。上にUTF-16を後付けしました。


6
ここからの引用であるUnicodeのよくある質問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.JavaリリースのUTF-16の時点ではまだ登場していない、とUTF-8は、Unicode標準の一部ではありませんでした。
マルコム

20
UCS-2は専門用語であり、流行語ではありません。
-DeadMG

14

主要部分については、単純で単純な将来の保証のために。それが見当違いの理由であったのか、それについて間違った方法であったのかは別の質問です。

あなたにも欠点のいくつかを説明するのJava 5から2004スイッチとUTF-16については、このドキュメント内の設計上の決定、一部の背後にあるいくつかの理由から見ることができます:Javaプラットフォームにおける補助文字を、と見るのJavaエコシステムの使用がない理由スタック全体で異なるエンコーディングですか?

UTF-16を使用する際の落とし穴の詳細、および一般にUTF-8がより良いオプションである理由については、UTF-16を有害と見なすべきかを参照してくださいおよびUTF-8 Everywhereマニフェスト。


8
「UTF-16は有害と見なされるべきですか?」へのリンクに対して+1 質問。私は最近UTF-8 Everywhereマニフェストを発見しましたが、今ではかなり完全に納得していると思います。価値があることについては、Javaが間違っていたにもかかわらず、Windowsの方がはるかに悪いと確信しています。
ダニエル・プライデン

5
まあ、Windowsがもっと間違っていたのは驚くことではありません。彼らはUnicodeへの切り替えを早くしたので、正しい選択が少なくなり、経験も少なくなりました。Javaは後になって、より適切になりましたが、それでもいくらか間違っています。現在、両方とも、サポートを続けなければならない古い、不正確な古いAPIを使用する必要があります。
ヨアヒムザウアー

4
それはソフトウェアの世界での生活であり、すべてのデータがなくても選択を行う必要があります。間違っていると、結果を長期間にわたって生き続けることができます。:-)
ブライアンノブラウチ

2
実際の文字を含む「通常の」配列への参照を保持する「通常の」クラスであるのではなくstring、Javaで「特殊な」タイプを作成するとパフォーマンスにどのような影響があったのでしょうか。文字列の生成方法に応じて、UTF-8、UTF-16、またはUTF-32が最も効率的な文字列の保存方法になる場合があります。「通常の」クラスが複数のフォーマットを処理するのに特に効率的な方法はないと思いますが、JVMをサポートする「特殊な」タイプは可能です。ArrayStringString
supercat 14

@supercat:正確な答えはありませんが、それに関連するSOの答えがあります。:)特別なタイプのアプローチに実際には対応していませんが、文字列を合理化することの潜在的な利点について説明しています。
ヘイレム14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.