サンプルの 1 バイト、2 バイト、3 バイト、4 バイト、5 バイト、および 6 バイトの Unicode 文字を探しています。そこにあるすべての異なるユニコード文字の何らかの参照へのリンクと、それらが(バイト単位で)どのくらい大きいかは大歓迎です。このリファレンスにも のようなコード ポイントがあることを願っています\uXXXXX
。
4 に答える
「1バイト、2バイト、3バイト、4バイト、5バイト、6バイトのUnicode文字」などはありません。
あなたはおそらくUnicode文字のUTF-8表現について話します。同様に、Javaの文字列はUTF-16で内部的に表されるため、Javachar
タイプはUTF-16の16ビットコードユニットを表し、各Unicode文字はこれらのコードユニットの1つまたは2つで表すことができ、各コードユニットは文字列リテラルのように表され\uxxxx
ます(コード単位は16ビット長であるため、これらのシーケンスには4桁の16進数しかないことに注意してください)。
したがって、UTF-8およびUTF-16表現を使用したUnicode文字の参照が必要な場合は、fileformat.infoの表を参照してください。
参照:
axtavt が指摘しているように、n バイト Unicode 文字の概念は無意味です。UTF-8 を意味すると仮定すると、テストなどに役立つ非常に単純な表は次のようになります。すべてのサンプル文字は私のブラウザー (Ubuntu の Chrome) で動作しますが、表示、コピー/貼り付けなどの点でマイレージが異なる場合があることに注意してください。
UTF-8 bytes Start End Example Character
1 U+0000 U+007F ! EXCLAMATION MARK U+0021)
2 U+0080 U+07FF ¶ PILCROW SIGN (U+00B6)
3 U+0800 U+FFFF ‱ PER TEN THOUSAND SIGN (U+2031)
4 U+10000 U+1FFFFF MUSICAL SYMBOL SIXTEENTH NOTE (U+1D161)
理論的には、UTF-8 には 5 バイトまたは 6 バイトの値が存在する可能性がありますが、Unicode の 32 ビット アドレス空間は実際には最大 10FFFF に制限されているため、4 バイト以上は必要ありません。
ここで重要な警告があることに注意してください。Javachar
はUnicode 文字ではありません。これは UTF-16 の 16 ビット コード単位であり、BMP 以外の文字 (上記の U+1D161 など) を 2 文字として扱い、それに応じて UTF-8 を処理するデータ ストリームを目にすることは珍しくありません。例えば:
Character: U+1D161
UTF-8 encoding: 0xF0 0x9D 0x85 0xA1
UTF-16 encoding: 0xD834 0xDD61
UTF-16 code points individually encoded as UTF-8: 0xED 0xA0 0xB4 0xED 0xB5 0xA1
これには、明らかに 6 バイトの UTF-8 文字が表示される効果がありますが、これは実際には UTF-8 では許可されていないことに注意してください。UTF-8 は、それらのポイントを表す UTF-16 コード単位のエンコードではなく、元のコード ポイントのエンコードである必要があります。これは、野生で見られないという意味ではありません...
- これをチェックしてください: http://en.wikipedia.org/wiki/List_of_Unicode_characters .
- これも: http://www.unicode.org/charts/。