Nếu tôi có thể hiểu được các quy tắc (hãy sửa lại cho tôi nếu tôi sai):
\ 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
, \\
không thuộc quy tắc OctalEscape; chúng phải theo các quy tắc ký tự thoát riêng biệt.
Decimal 255 tương đương với bát phân 377 (sử dụng Windows Calculator trong chế độ khoa học để xác nhận)
Do đó một ba chữ số Octal giá trị rơi vào khoảng \000
(0) để \377
(255)
Do đó, \4715
không phải là giá trị bát phân hợp lệ vì nó có nhiều hơn ba chữ số bát phân. Nếu bạn muốn truy cập ký tự điểm mã với giá trị thập phân 4715, hãy sử dụng biểu tượng thoát Unicode \u
để đại diện cho ký tự UTF-16 \u126B
(4715 dưới dạng thập phân) vì mọi Java char
đều bằng Unicode UTF-16.
từ 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).
được sửa đổi:
Bất cứ điều gì vượt quá giá trị bát phân có giá trị trong phạm vi 8-bit (lớn hơn một byte) là ngôn ngữ cụ thể. Một số ngôn ngữ lập trình có thể tiếp tục để phù hợp với việc thực thi Unicode; một số có thể không (giới hạn nó thành một byte). Java chắc chắn không cho phép nó mặc dù nó có hỗ trợ Unicode.
Một vài ngôn ngữ lập trình (nhà cung cấp phụ thuộc) mà giới hạn một byte literals bát phân:
- Java (tất cả các nhà cung cấp): - Một số nguyên liên tục bát phân bắt đầu với 0 hoặc một con số trong base-8 (lên đến 0377); \ 0 đến \ 7, \ 00 đến \ 77, \ 000 tới \ 377 (ở định dạng chuỗi nhị phân)
- C/C++ (Microsoft) - Hằng số nguyên bát phân bắt đầu bằng 0 (tối đa 0377); định dạng chuỗi bát phân dạng chữ
\nnn
- Ruby - Hằng số nguyên bát phân bắt đầu bằng 0 (tối đa 0377); chuỗi bát phân định dạng đen
\nnn
Một vài ngôn ngữ lập trình (nhà cung cấp phụ thuộc) có hỗ trợ chữ bát phân lớn hơn một byte:
- Perl - Một số nguyên liên tục bát phân bắt đầu với 0 ; bát phân chuỗi chữ dạng
\nnn
Xem http://search.cpan.org/~jesse/perl-5.12.1/pod/perlrebackslash.pod#Octal_escapes
Một vài ngôn ngữ lập trình không hỗ trợ chữ bát phân:
- C# - sử dụng
Convert.ToInt32(integer, 8)
cho cơ sở-8 How can we convert binary number into its octal number using c#?
255 là giới hạn ASCII cơ bản nếu tôi không nhầm bạn có một cho mỗi ký tự ASCII cơ sở duy nhất. Bạn có nên hạnh phúc với điều đó không? Lý do bạn không thể đi tới, nói rằng \ 4715 đơn giản là vì nó vượt quá 255 là giới hạn ASCII chuẩn = D (Tôi không hiểu giải thích, hãy tham khảo người trả lời) –
@Shingetsu: giới hạn ASCII là 127, không phải 255 _Bytes_ được giới hạn ở 255, trừ khi bạn đang nói về các byte Java, vì một số lý do kỳ lạ, đã ký :-) Nhưng các ký tự Java không phải là byte. – paxdiablo
[Xem thêm] (http://stackoverflow.com/questions/3537706/howto-unescape-a-java-string-literal-in-java/4298836) –