Trong các mã hóa Unicode khác nhau, ví dụ UTF-16le hoặc UTF-8, một ký tự có thể chiếm 2 hoặc 3 byte. Nhiều ứng dụng Unicode không quan tâm đến độ rộng hiển thị của các ký tự Unicode giống như chúng là tất cả các chữ cái Latinh. Ví dụ: trong văn bản -cột, phải chứa Ký tự tiếng Trung hoặc Chữ cái Latinh trong một dòng, nhưng hầu hết ứng dụng (như Eclipse, Notepad ++ và tất cả các trình soạn thảo văn bản nổi tiếng, tôi dám chắc nếu có bất kỳ ngoại lệ tốt nào) chỉ tính mỗi ký tự Trung Quốc là 1 chiều rộng như chữ Latinh. Điều này chắc chắn làm cho định dạng kết quả xấu xí và không liên kết.Làm cách nào để biết chiều rộng hiển thị ưa thích (theo cột) của các ký tự Unicode?
Ví dụ, một tab-width 8 sẽ nhận được kết quả sau xấu xí (đếm tất cả Unicode như chiều rộng 1 màn hình):
apple 10
banana 7
苹果 6
猕猴桃 31
pear 16
Tuy nhiên, định dạng mong đợi là (Đếm từng chữ Hán như 2 chiều rộng):
apple 10
banana 7
苹果 6
猕猴桃 31
pear 16
Tính toán không đúng trên độ rộng hiển thị của ký tự làm cho các trình chỉnh sửa này hoàn toàn vô dụng khi thực hiện sắp xếp tab và sắp xếp gói và đoạn văn bản.
Mặc dù, chiều rộng của một ký tự có thể khác nhau giữa các phông chữ khác nhau, nhưng trong mọi trường hợp phông chữ thiết bị đầu cuối có kích thước cố định, ký tự Trung Quốc luôn là chiều rộng gấp đôi. Đó là để nói, mặc dù phông chữ, mỗi ký tự Trung Quốc được ưa thích để hiển thị trong 2 chiều rộng.
Một trong những giải pháp là, tôi có thể có được chiều rộng chính xác bằng cách chuyển đổi mã hóa để GB2312, trong GB2312 mã hóa mỗi ký tự Trung Quốc mất 2 byte. tuy nhiên, một số ký tự Unicode không tồn tại trong bộ ký tự GB2312 (hoặc GBK bộ ký tự). Và nói chung, không nên tính chiều rộng màn hình từ kích thước được mã hóa theo byte.
Để chỉ cần tính toán tất cả ký tự trong Unicode trong phạm vi (\u0080
.. \uFFFF
) làm 2 chiều rộng cũng không chính xác, bởi vì cũng có nhiều ký tự 1 chiều nằm rải rác trong phạm vi.
Cũng khó khi tính toán chiều rộng hiển thị của chữ cái tiếng Ả Rập và chữ cái Hàn Quốc, vì chúng xây dựng một từ/ký tự bằng số mã Unicode tùy ý. Vì vậy, chiều rộng màn hình của một điểm mã Unicode có thể không phải là một số nguyên, tôi cho rằng đó là ok, chúng có thể được nối đất thành số nguyên trong thực tế, ít nhất là tốt hơn so với số nguyên.
Vì vậy, có bất kỳ thuộc tính nào liên quan đến chiều rộng hiển thị ưa thích của một char trong tiêu chuẩn Unicode không? Hoặc bất kỳ chức năng thư viện Java nào để tính toán độ rộng màn hình?
Tôi đoán vấn đề là chiều rộng phụ thuộc vào phông chữ, do đó bạn tính các ký tự (có vấn đề bạn đề cập) hoặc bạn tính toán độ dài chuỗi ký tự và sử dụng. –