Trong suốt số lượng ký tự unicode lớn, có một số ký tự đại diện cho nhiều hơn một ký tự, giống như hình chữ U + FB00 ff cho hai ký tự 'f'. Có cách nào dễ dàng để chuyển đổi các ký tự như thế này thành nhiều ký tự đơn không? Tốt hơn là một cái gì đó có sẵn trong Java API tiêu chuẩn, nhưng tôi có thể tham khảo một thư viện bên ngoài nếu cần thiết.Tách các ký tự ligature Unicode
Trả lời
U + FB00 là ký tự tương thích. Thông thường Unicode không hỗ trợ các điểm mã riêng biệt cho các chữ ligatures (cho rằng đó là quyết định bố trí nếu và khi sử dụng một kết nối và không nên ảnh hưởng đến cách dữ liệu được lưu trữ). Một số vài của những thứ vẫn còn tồn tại để cho phép khả năng tương thích chuyển đổi khứ hồi với các mã hóa cũ hơn mà làm đại diện cho các chữ lig như các thực thể riêng biệt.
May mắn thay, thông tin có ký tự đại diện cho là có trong Unicode data file và các hệ thống xử lý chuỗi có khả năng nhất có dữ liệu được tích hợp sẵn.
Trong Java, bạn sẽ cần phải sử dụng the Normalizer
class và NFKC
dạng:
String ff ="\uFB00";
String normalized = Normalizer.normalize(ff, Form.NFKC);
System.out.println(ff + " = " + normalized);
này sẽ in
ff = ff
Tuyệt vời! Cảm ơn! – nonoitall
@nonoitall: NFKD không phải là thuốc chữa bách bệnh: có rất nhiều ligatures và các hình thức kết hợp notionally khác ** nó chỉ không hoạt động chút nào. ** Ví dụ, nó sẽ không quản lý để phân hủy * ß * hoặc * ẞ * thành * SS * (ngay cả những cái đó cũng có dạng gấp!), Cũng không * Æ * thành * AE * hoặc * æ * thành * ae *, cũng không * Œ * thành * OE * hoặc * œ * thành * oe *. Nó cũng vô ích khi chuyển * ð * hoặc * đ * thành * d * hoặc * ø * thành * o *. Đối với ** tất cả ** những điều đó, bạn cần UCA (Unicode Collation Algorithm), ** not ** NFKD. NFD/NFKD cũng có cả tài sản gây phiền nhiễu phá hủy những người độc thân, nếu điều này quan trọng với bạn. – tchrist
@ tchrist: sự hiểu biết của tôi là những phân tích mà bạn đề cập * nên * không được thực hiện. Chúng không chỉ đơn giản là chữ ghép trong ý nghĩa đánh máy, mà là các ký tự riêng biệt thực sự được sử dụng khác nhau! ß * có thể * được phân tách thành ss nếu cần thiết (ví dụ: nếu bạn chỉ có thể lưu trữ ASCII), nhưng chúng không ** tương đương. Mặt khác, mặt dây ff là * chỉ * một dây chằng. –
Bạn có thể thử các java.text.Normalizer, nhưng tôi không thực sự chắc chắn nếu điều đó làm việc cho ligatures.
Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/18866472) – pirho
Quá trình bạn đang nói về được gọi là Normalization và được quy định trong Unicode Normalization Forms lưu ý kỹ thuật.
Có một lớp trong thư viện lớp Java SE có tên là java.text.Normalizer
thực hiện quy trình này. Tuy nhiên, bạn cần phải đọc tài liệu Unicode được liên kết ở trên để tìm hiểu xem "biểu mẫu bình thường" nào bạn cần sử dụng để có được kết quả mong muốn. Nó không phải là đơn giản ....
- 1. Các ký tự Unicode Base64ing
- 2. Ký tự Unicode chuỗi
- 3. Vẽ các ký tự Unicode trên iPhone
- 4. Cách tách các ký tự unicode (LEFT_TO_RIGHT_MARK) khỏi một chuỗi trong php
- 5. Ký tự Unicode cao nhất?
- 6. Ký tự unicode C++ in
- 7. Ký tự Unicode: giỏ hàng
- 8. Tách chuỗi bằng ký tự
- 9. Ký tự Unicode và Internet Explorer
- 10. Ký tự Unicode cho PUZZLE PIECE?
- 11. Biến đổi ký tự unicode dạng dải
- 12. Ký tự Unicode trong bảng Sql
- 13. Tìm tên ký tự Unicode với Javascript
- 14. Hiển thị các ký tự unicode trong TextView Android
- 15. Sử dụng các ký tự unicode trong tài liệu Haddock
- 16. Các ký tự Unicode và Ascii có giống nhau không?
- 17. Xác thực Email góc Angular với các ký tự unicode
- 18. Các ký tự Unicode trong Ruby 1.9.3 IRB với RVM
- 19. Python 3 smtplib gửi với các ký tự unicode
- 20. Danh sách các ký tự chữ cái Unicode
- 21. C# Nút Văn bản Các ký tự Unicode
- 22. Javascript Regex + Unicode Diacritic Kết hợp các ký tự '
- 23. Thay thế và các ký tự Unicode trong SQL
- 24. Các ký tự giống hệt nhau trong Unicode
- 25. Lỗi iOS NSLog với các ký tự Unicode
- 26. điền vào mẫu pdf với các ký tự unicode
- 27. Thay thế các ký tự unicode trong PostgreSQL
- 28. Phông chữ Chiếc đĩa bay cho các ký tự unicode
- 29. Regex cho các tên có ký tự đặc biệt (Unicode)
- 30. PHP-GD: Xử lý các ký tự Unicode
Tôi đã tự do thêm từ khóa * ligature * vào câu hỏi của bạn. :) – deceze
Cảm ơn - Tôi không chắc họ đã gọi gì. :-) – nonoitall
không phải đồ thị cho đơn vị cơ bản? –