Bas*_*que 46
为了澄清,UUID实际上是128位值,而不是文本或数字.您可以将它们视为128位无符号整数.
人类不能很好地读取和写入128位作为128 1和0字符.当需要为人类消费编写UUID时,我们使用十六进制(数字0- 9和字母a- f)字符串.我们使用由4个连字符组成的32个十六进制字符来表示总共36个字符中的128位.例如:
550e8400-e29b-41d4-a716-446655440000
对于问题中提到的"特殊字符",您只能在UUID的十六进制字符串表示中看到这23个可能的字符:
abcdefABCDEF1234567890-
2008 - 08年的最新国际规范(强调我的):
6.5.4生成UUID十六进制表示的软件不得使用大写字母.注 - 建议将所有人类可读格式中使用的十六进制表示限制为小写字母.但是,处理此表示的软件需要接受6.5.2中规定的大写和小写字母.
但是,Microsoft,Apple和其他人通常违反小写规则.有一次微软发布了生成混合大小写的软件(使用大写和小写),这显然是一个非预期的功能.
规范如此说:
BNF中UUID类' toString方法文档的Java文档在生成字符串时允许使用大写,与UUID标准规范相矛盾.但是,在Java 8 的Oracle实现中,类及其方法的实际行为是正确的,使用小写输出但是容许输入的大写或小写.toString
以小写/大写输入:
UUID uuidFromLowercase = UUID.fromString ( "897b7f44-1f31-4c95-80cb-bbb43e4dcf05" );
UUID uuidFromUppercase = UUID.fromString ( "897B7F44-1F31-4C95-80CB-BBB43E4DCF05" );
Run Code Online (Sandbox Code Playgroud)
仅输出为小写:
System.out.println ( "uuidFromLowercase.toString(): " + uuidFromLowercase );
System.out.println ( "uuidFromUppercase.toString(): " + uuidFromUppercase );
Run Code Online (Sandbox Code Playgroud)
uuidFromLowercase.toString():897b7f44-1f31-4c95-80cb-bbb43e4dcf05
uuidFromUppercase.toString():897b7f44-1f31-4c95-80cb-bbb43e4dcf05
请参阅此代码在IdeOne.com中运行.
当UUID尚未知晓时,您可以使用由全零组成的特殊UUID.
00000000-0000-0000-0000-000000000000
您可以使用生成值的众多网站中的任何一个来查看UUID值的一些示例.例如:
或者使用命令行工具.几乎每个操作系统都捆绑了这样一个工具.在Mac OS X上,启动Terminal.app并键入uuidgen.
适用于Javadoc java.util.UUID中的链接,RFC 4122,其说
Run Code Online (Sandbox Code Playgroud)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.
所以不,它不会生成特殊字符.
| 归档时间: |
|
| 查看次数: |
24128 次 |
| 最近记录: |