Si puedo entender las reglas (por favor, corríjanme si me equivoco):
\ 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
, \\
no caen bajo las reglas OctalEscape; deben estar bajo reglas de carácter de escape separadas.
decimal 255 es igual a octal 377 (usar calculadora de Windows en modo científico para confirmar)
Por lo tanto un valor octal de tres dígitos cae en el rango de \000
(0) a \377
(255)
Por lo tanto, \4715
no es un valor octal válido ya que es una regla de más de tres dígitos octales. Si desea acceder al carácter de punto de código con el valor decimal 4715, use el símbolo de escape Unicode \u
para representar el carácter UTF-16 \u126B
(4715 en forma decimal) ya que cada Java char
está en Unicode UTF-16.
de http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html:
The char data type (and therefore the value that a Character object encapsulates) are based on the original Unicode specification, which defined characters as fixed-width 16-bit entities. The Unicode standard has since been changed to allow for characters whose representation requires more than 16 bits. The range of legal code points is now U+0000 to U+10FFFF, known as Unicode scalar value. (Refer to the definition of the U+n notation in the Unicode standard.)
The set of characters from U+0000 to U+FFFF is sometimes referred to as the Basic Multilingual Plane (BMP). Characters whose code points are greater than U+FFFF are called supplementary characters. The Java 2 platform uses the UTF-16 representation in char arrays and in the String and StringBuffer classes. In this representation, supplementary characters are represented as a pair of char values, the first from the high-surrogates range, (\uD800-\uDBFF), the second from the low-surrogates range (\uDC00-\uDFFF).
Editado:
Cualquier cosa que más allá del valor octal válido del rango de 8 bits (más grande que un byte) es específico del idioma. Algunos lenguajes de programación pueden continuar para coincidir con la implementación de Unicode; algunos pueden no (limitarlo a un byte). Java definitivamente no lo permite aunque tiene soporte Unicode.
Unos pocos lenguajes de programación (Vendor-dependiente) de ese límite a de un byte literales octales:
- Java (todos los proveedores): - una constante entera octal que comienza con 0 o de un solo dígito en base-8 (hasta 0377); \ 0 a \ 7, \ 00 a \ 77, \ 000 a \ 377 (en formato literal de cadena octal)
- C/C++ (Microsoft) - Constante de entero entero que comienza con 0 (hasta 0377); formato literal de cadena octal
\nnn
- Ruby: constante entera de octal que comienza con 0 (hasta 0377); cadena octal formato literal
\nnn
Unos pocos lenguajes de programación (proveedor-dependiente) que soportan literales octales más grande que la de un byte:
- Perl - Una constante de entero octal que comienza con 0 ; cadena octal formato literal
\nnn
Ver http://search.cpan.org/~jesse/perl-5.12.1/pod/perlrebackslash.pod#Octal_escapes
Unos pocos lenguajes de programación no soportan literales octales:
- C# - usar
Convert.ToInt32(integer, 8)
para la base-8 How can we convert binary number into its octal number using c#?
255 es el límite ASCII básico si no me equivoco, entonces tienes uno para cada personaje base ASCII. ¿No deberías estar feliz con eso? La razón por la que no puede ir, digamos \ 4715 es simplemente porque es más de 255, que es el límite ASCII estándar = D (no puedo explicar, consulte el contestador) –
@Shingetsu: el límite ASCII es 127, no 255 . _Bytes_ están limitados a 255, a menos que estés hablando de bytes de Java que, por alguna razón extraña, están firmados :-) Pero los caracteres de Java no son bytes. – paxdiablo
[Ver también] (http://stackoverflow.com/questions/3537706/howto-unescape-a-java-string-literal-in-java/4298836) –