Half-Width Character

Ký tự chiếm nửa chiều rộng của ký tự toàn chiều rộng trong phông chữ cố định. Ký tự ASCII là nửa chiều rộng.

Ký tự nửa chiều rộng là ký tự chiếm nửa không gian ngang của ký tự toàn chiều rộng trong phông chữ đơn cách. Ký tự ASCII tiêu chuẩn (A-Z, a-z, 0-9), ký hiệu phổ biến và katakana nửa chiều rộng thuộc danh mục này. Khái niệm "nửa chiều rộng" và "toàn chiều rộng" bắt nguồn sâu trong văn hóa tin học Nhật Bản, và đã được chính thức áp dụng trong tiêu chuẩn Unicode dưới dạng khối Halfwidth and Fullwidth Forms.

Sự phân biệt nửa chiều rộng/toàn chiều rộng bắt nguồn từ những năm 1970 và 1980 trong quá trình phát triển tin học Nhật Bản. Phông chữ cố định thời đó hiển thị ký tự ASCII trong ma trận điểm 8x16 (1 byte) và kanji hoặc kana trong ma trận điểm 16x16 (2 byte). Tỷ lệ chiều rộng này đã tạo ra các thuật ngữ "nửa chiều rộng" và "toàn chiều rộng". Mặc dù phông chữ tỷ lệ hiện đại hiển thị ký tự ở các chiều rộng khác nhau, sự phân biệt khái niệm vẫn thiết yếu cho xác thực đầu vào và xử lý dữ liệu.

Trong biểu mẫu web tiếng Nhật, người dùng thường được hướng dẫn nhập số điện thoại, mã bưu chính, địa chỉ email và số thẻ tín dụng bằng ký tự nửa chiều rộng. Biểu mẫu từ chối đầu vào toàn chiều rộng rất phổ biến, và từ góc độ khả năng sử dụng, triển khai chuyển đổi tự động được khuyến nghị. Sách thiết kế UI biểu mẫu thảo luận các phương pháp tốt nhất để xử lý đầu vào toàn chiều rộng và nửa chiều rộng.

Từ góc độ mã hóa, ký tự ASCII nửa chiều rộng tiêu thụ 1 byte trong UTF-8, trong khi ký tự toàn chiều rộng tiêu thụ 3 byte. Tuy nhiên, katakana nửa chiều rộng (Unicode Halfwidth Katakana Forms, U+FF65-U+FF9F) cũng chiếm 3 byte trong UTF-8 mặc dù có vẻ ngoài hẹp, vì vậy không tiết kiệm lưu trữ. Trong Shift_JIS, katakana nửa chiều rộng là 1 byte, đây là điều quan trọng cần xem xét khi làm việc với hệ thống cũ.

Trong lập trình, trộn lẫn ký tự toàn chiều rộng và nửa chiều rộng là nguồn lỗi phổ biến. Khoảng trắng toàn chiều rộng (U+3000) lẻn vào thụt lề có thể gây lỗi biên dịch, và chữ số toàn chiều rộng như "123" không thể phân tích thành số mà không chuyển đổi. Trong JavaScript, String.prototype.normalize() và biểu thức chính quy thường được sử dụng để chuyển đổi ký tự chữ-số toàn chiều rộng sang nửa chiều rộng. Sách cơ bản lập trình bao gồm chiều rộng ký tự như một khái niệm cơ bản.

Một quan niệm sai lầm phổ biến là ký tự nửa chiều rộng luôn sử dụng nửa số byte của ký tự toàn chiều rộng. Mặc dù điều này phần lớn đúng trong thời kỳ Shift_JIS, trong UTF-8 cả katakana nửa chiều rộng và hiragana toàn chiều rộng đều chiếm 3 byte mỗi ký tự. Hơn nữa, thuộc tính East Asian Width của Unicode phân loại ký tự thành sáu danh mục - Fullwidth, Halfwidth, Wide, Narrow, Ambiguous và Neutral - cho thấy sự phức tạp mà phân loại nhị phân nửa/toàn đơn giản không thể nắm bắt.

Đối với đếm ký tự, sự phân biệt nửa chiều rộng/toàn chiều rộng ảnh hưởng trực tiếp đến cách đếm ký tự. Twitter (nay là X) đếm ký tự chữ-số nửa chiều rộng là 0,5 ký tự và ký tự toàn chiều rộng là 1. SMS cho phép 160 ký tự chỉ nửa chiều rộng nhưng chỉ 70 khi bao gồm ký tự toàn chiều rộng. Vì mỗi dịch vụ xử lý sự phân biệt khác nhau, đếm ký tự chính xác đòi hỏi phát hiện loại ký tự đúng.