2013-03-15 14 views
11

オブジェクトのシリアル化とJNIに標準のUTF-8ではなく、Javaがmodified UTF-8を使用するのはなぜですか?JavaがUTF-8の代わりに変更されたUTF-8を使用するのはなぜですか?

変更されたUTF-8にヌル文字を埋め込むことができないため、ヌル文字で動作する関数を使用することができます。他の理由はありますか?

+0

私はcourelにjava以外のシリアライズされたjavaオブジェクトを読み込もうとしているのですか? – radai

+1

@radai:私は何も読んでいない、ちょうど質問をしています。 =) – vitaut

+1

その場合、NPEは正しいと思います。 Cとの対話(シリアライズ、JNI、クラスファイルの解析)が必要なときにいつでも使用するように見えます。 – radai

答えて

9

補助文字を処理する(処理しない)方が処理が高速かつ簡単です。

Javaは文字を16ビットcharとして表しますが、ユニコードは64Kを超える文字を含むように進化しています。したがって、補助文字の中には、Javaの2 char(サロゲートペア)でエンコードする必要があります。

厳密なUTF-8では、サロゲートペアを文字に変換し、文字をバイトにエンコードする必要があります。デコーダは補足キャラクタをサロゲートペアに戻す必要があります。

chars -> character -> bytes -> character -> chars 

両端には、Javaをしているので、我々はいくつかのショートカットを取り、charレベル

char -> bytes -> char 

もないエンコーダやデコーダに直接エンコードすることができますが、サロゲート・ペアを心配する必要があります。

+0

@downvoter説明できないダウンボントは単なるサイトの破壊行為とみなされがちです。この回答が役に立たないと思われる場合は、理由を述べてください。 – EJP

+0

これは、Javaからの読み込みを意図していない外部記憶域に対して、「変更されたUTF-8」(たとえば、DataOutputStreamから)を使用しないことです。 – robinst

1

私はそれが主な理由だと考えます。 C言語では、文字列を処理する必要があり、組み込みのNULを含めると複雑になります。

1

Modified UTF-8の説明はUnicode Explained - Page 306ですが、については説明しません。変更されたUTF-8が決定されました。

BMP以外のUnicode文字のサポートがJavaに最初に追加された方法については、Java固有のドキュメントのSupplementary Characters in the Java Platformの説明もあります。しかし、再びについての説明はありません。変更されたUTF-8が決定されました。

なぜであるかは、Javaのアーキテクトに直接質問しないかぎり見つからないと思います。

+0

これは_how_の素晴らしい説明ですが、_why_の情報は表示されません –

関連する問題