明確にするために、 [〜#〜] uuid [〜#〜] は実際には128ビット値であり、テキストや数字ではありません。これらは、128ビットの符号なし整数と考えることができます。
人間は128ビットを128 1
および0
文字として読み書きすることはできません。人間が使用するためにUUIDを書き込む必要がある場合は、16進数 16進数 (数字0
-9
と文字a
-f
)文字列。 4つのハイフンでグループ化された32個の16進文字を使用して、これらの128ビットを合計36文字で表します。例えば:
550e8400-e29b-41d4-a716-446655440000
質問で言及されている「特殊文字」については、UUIDの16進文字列表現でこれらの23の可能な文字のみが表示されます。
abcdefABCDEF1234567890-
最新の 国際仕様 2008-08年付けの状態(私の強調):
6.5.4 UUIDの16進数表現を生成するソフトウェアは、大文字を使用してはなりません。注–人間が読める形式で使用される16進表記は、小文字に限定することをお勧めします。ただし、6.5.2で指定されているように、この表現を処理するソフトウェアは大文字と小文字の両方を受け入れる必要があります。
ただし、Microsoft、Apple、およびその他は一般に小文字の規則に違反しています。ある時点で、Microsoftは大文字と小文字の両方(大文字と小文字の両方を使用)を生成するソフトウェアをリリースしました。これは明らかに意図しない機能です。
仕様が言うようにしてください:
Java UUID
クラスのドキュメント ' toString
メソッドドキュメント [ 〜#〜] bnf [〜#〜] UUID標準仕様とは異なり、文字列を生成するときに大文字を使用できます。ただし、クラスの実際の動作とそのtoString
メソッドは- Oracleの実装 for Java 8は正しいです。出力には小文字を使用しますが、入力には大文字または小文字のどちらも使用できます。
小文字/大文字のいずれかで入力します。
UUID uuidFromLowercase = UUID.fromString ( "897b7f44-1f31-4c95-80cb-bbb43e4dcf05" );
UUID uuidFromUppercase = UUID.fromString ( "897B7F44-1F31-4C95-80CB-BBB43E4DCF05" );
小文字のみに出力:
System.out.println ( "uuidFromLowercase.toString(): " + uuidFromLowercase );
System.out.println ( "uuidFromUppercase.toString(): " + uuidFromUppercase );
uuidFromLowercase.toString():897b7f44-1f31-4c95-80cb-bbb43e4dcf05
uuidFromUppercase.toString():897b7f44-1f31-4c95-80cb-bbb43e4dcf05
これを参照してください コードはIdeOne.comでライブ実行 。
UUIDがまだ不明な場合は、すべてゼロからなる特別なUUIDを使用できます。
00000000-0000-0000-0000-000000000000
値を生成する多くのWebサイトのいずれかを使用して、UUID値の例をいくつか見ることができます。例えば:
または、コマンドラインツールを使用します。ほぼすべてのオペレーティングシステムに、このようなツールがバンドルされています。 Mac OS Xで、 Terminal.app を起動し、uuidgen
と入力します。
Java.util.UUID のjavadocは RFC 4122 にリンクしています
Each field is treated as an integer and has its value printed as a zero-filled hexadecimal digit string with the most significant digit first. The hexadecimal values "a" through "f" are output as lower case characters and are case insensitive on input.
そのため、特殊文字は生成されません。
文字列に変換するように要求しない限り、UUIDは文字で構成されません。その時点で、16進文字とハイフンで構成される文字列に変換されます UUID.toString()
のドキュメントで説明されています)。
(16進数が大文字か小文字かは文書化されていません。)
Internet RFC 4122 によれば、
各フィールドは整数として扱われ、その値はゼロで埋められた16進数の文字列として出力され、最上位の数字が最初になります。 16進値 "a"から "f"は小文字で出力され、入力では大文字と小文字は区別されません。
インターネット標準を尊重する場合は、常に小文字を使用してください。
BNFは大文字を定義しますが、出力ではなく入力用です。