Tại sao có quá nhiều khoảng trắng và ngắt dòng trong Unicode?


19

Unicode có thể có 50 khoảng trắng

\ u0009 \ u000A- \ u000D \ u0020 \ u0085 \ u00A0 \ u1680 \ u180E \ u2000- \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000] [\ u0009 \ u000A u180E \ u2000- \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000

và 6 ngắt dòng

không chỉ CRLF, LF, CR, mà cả NEL (U + 0085), PS (U + 2029) và LS (U + 2028).

Có lẽ tôi có thể hiểu hầu hết các khoảng trắng và PS ("Dấu phân cách đoạn"), nhưng "Dòng tiếp theo" và "Dấu tách dòng" tốt cho cái gì?

Tất cả trông giống như được phát minh bởi một ủy ban rất lớn, nơi mọi người đều muốn có không gian riêng của họ và các nhà lãnh đạo được cấp một dòng phá vỡ mỗi dòng. Nhưng nghiêm túc, làm thế nào để bạn đối phó với nó khi ngôn ngữ lập trình của bạn không hỗ trợ nó (hoặc nó sai như ví dụ Java)?


1
Làm thế nào để Java làm điều đó "sai"?
Billy ONeal

Gần như hoàn toàn, s. stackoverflow.com/questions/4304928/
hy

2
@maaartinus: (Tôi không thể tin rằng tôi bảo vệ tất cả mọi thứ của Java) Các lớp ký tự của Java được ghi lại để áp dụng cho một nhóm ký tự cụ thể. Unicode cung cấp nhiều ký tự trông giống như chúng phù hợp với các lớp ký tự này, nhưng Unicode không định nghĩa các ngôn ngữ biểu thức chính quy; chỉ mã hóa ký tự. Java hành xử hoàn toàn chính xác theo thông số kỹ thuật của nó - đó là để phù hợp với khoảng trắng điển hình. Nếu bạn muốn nó khớp với mọi thứ trong tiêu chuẩn Unicode có thể được xem là không gian trống thì bạn sẽ phải tự viết nó.
Billy ONeal

2
Thx cho thông tin. Tuy nhiên, nhưng họ có thể tự do tạo ra một Pattern.compile2010phương thức trả lại các biểu thức hoạt động theo định nghĩa năm ngoái. Họ cũng được tự do tạo ra một phương pháp Pattern.compileLatestUTScó thể nói rõ ràng rằng ý nghĩa sẽ thay đổi theo đặc điểm kỹ thuật mới.
maaartinus

2
Có vẻ như Java cuối cùng đã sửa / hiện đại hóa việc triển khai regex của họ, sử dụng cờ chọn tham gia để ngăn chặn các vấn đề tương thích ngược: stackoverflow.com/a/4307261/1172352
peterflynn

Câu trả lời:


15

Có lẽ tôi có thể hiểu hầu hết các khoảng trắng và PS ("Dấu phân cách đoạn"), nhưng "Dòng tiếp theo" và "Dấu tách dòng" là gì tốt cho

LINE TIẾP THEO (U + 0085) thường được sử dụng làm ký tự dòng mới trên các hệ thống EBCDIC (dưới dạng 0x15). Nó giống như CR + LF, nhưng là một nhân vật.

LINE SEPARATOR (U + 2028) và PARAGRAPH SEPARATOR (U + 2029) được giải thích trong phần 5,8 của tiêu chuẩn Unicode , mô tả chúng như một phiên bản văn bản thuần túy của HTML <br><p>, để phân biệt các chức năng này của "dòng mới". Nhưng trong thực tế, những nhân vật này không được sử dụng nhiều.


1
Giải thích tốt, tuy nhiên đối với tôi nó có nghĩa là: một dòng ngắt cho mỗi lãnh đạo ủy ban.
maaartinus

5
@maaartinus Không. Một dòng ngắt cho tất cả các tiêu chuẩn xung đột trước đó và 2 dòng khác rõ ràng hơn từ tiêu chuẩn Unicode.
Milind R

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.