Если я могу понять правила (поправьте меня, если я ошибаюсь):
\ 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; они должны соответствовать отдельным правилам escape-символов.
Десятичное число 255 равно Окталу 377 (используйте Windows Calculator в научном режиме для подтверждения)
Следовательно, трехзначное октальное значение попадает в диапазон от \000
(0) до \377
(255)
Следовательно, \4715
не является действительным восьмеричным значением, поскольку это правило больше трех восьмеричных цифр. Если вы хотите получить доступ к символу кодовой точки с десятичным значением 4715, используйте escape-символ Unicode \u
для представления символа UTF-16 \u126B
(4715 в десятичной форме), поскольку каждый Java char
находится в Unicode UTF-16.
от http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html:
Тип данных char (и, следовательно, значение этого объекта Character
инкапсуляции) основаны на оригинальной спецификации Unicode, которая
определенные символы как 16-битные объекты фиксированной ширины. Юникод
с тех пор стандарт был изменен, чтобы учесть символы, чьи
представление требует более 16 бит. Ассортимент юридического кодекса
точки теперь от U + 0000 до U + 10FFFF, известные как скалярное значение Unicode.
(См. Определение обозначения U + n в стандарте Unicode.)
Набор символов от U + 0000 до U + FFFF иногда называют
как базовая многоязычная плоскость (BMP). Символы, чьи кодовые точки
больше, чем U + FFFF, называются дополнительными символами. Ява
2 платформа использует представление UTF-16 в массивах символов и в
Классы String и StringBuffer. В этом представлении дополнительные
символы представлены в виде пары значений 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 #?