如果我能理解规则(如果我错了,请纠正我):
\ OctalDigit
Examples:
\0, \1, \2, \3, \4, \5, \6, \7
\ OctalDigit OctalDigit
Examples:
\00, \07, \17, \27, \37, \47, \57, \67, \77
\ ZeroToThree OctalDigit OctalDigit
Examples:
\000, \177, \277, \367,\377
\t
, \n
,\\
不属于 OctalEscape 规则;它们必须遵循单独的转义字符规则。
十进制 255 等于八进制 377(在科学模式下使用 Windows 计算器确认)
因此,三位八进制值落在\000
(0) 到\377
(255)的范围内
因此,\4715
它不是一个有效的八进制值,因为它是多于三位八进制数字的规则。如果要访问具有十进制值 4715 的代码点字符,请使用 Unicode 转义符号\u
来表示 UTF-16 字符\u126B
(十进制形式的 4715),因为每个 Javachar
都是 Unicode UTF-16。
来自http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html:
char 数据类型(以及因此 Character 对象封装的值)基于原始 Unicode 规范,该规范将字符定义为固定宽度的 16 位实体。此后,Unicode 标准已更改为允许表示需要超过 16 位的字符。合法代码点的范围现在是 U+0000 到 U+10FFFF,称为 Unicode 标量值。(参考 Unicode 标准中 U+n 符号的定义。)
从 U+0000 到 U+FFFF 的字符集有时称为基本多语言平面 (BMP)。码位大于 U+FFFF 的字符称为补充字符。Java 2 平台在 char 数组以及 String 和 StringBuffer 类中使用 UTF-16 表示。在此表示中,补充字符表示为一对 char 值,第一个来自高代理范围 (\uD800-\uDBFF),第二个来自低代理范围 (\uDC00-\uDFFF)。
编辑:
任何超出 8 位范围(大于一个字节)的有效八进制值都是特定于语言的。一些编程语言可能会进行匹配Unicode的实现;有些可能不会(将其限制为一个字节)。Java 绝对不允许它,即使它支持 Unicode。
一些限制为一字节八进制文字的编程语言(取决于供应商) :
- Java(所有供应商): - 一个八进制整数常量,以 0 或 base-8 中的一位数开头(最多 0377);\0 到 \7、\00 到 \77、\000 到 \377(八进制字符串文字格式)
- C/C++ (Microsoft) - 一个以 0 开头的八进制整数常量(最多 0377);八进制字符串文字格式
\nnn
- Ruby - 一个以 0 开头的八进制整数常量(最多 0377);八进制字符串文字格式
\nnn
一些支持大于一字节的八进制文字的编程语言(取决于供应商) :
- Perl - 一个以 0 开头的八进制整数常量;八进制字符串文字格式
\nnn
参见http://search.cpan.org/~jesse/perl-5.12.1/pod/perlrebackslash.pod#Octal_escapes
一些编程语言不支持八进制文字:
- C# -
Convert.ToInt32(integer, 8)
用于 base-8我们如何使用 c# 将二进制数转换为八进制数?