Convert chữ số Nhật sang chữ số Latin

mình đang dùng hàm X = Convert.ToDecimal(valueString);
nhưng trường hợp mình gõ (12345) nó khác với chữ số Latin (12345) mình muốn khi gõ chữ số nhật thì nó cũng hiểu hoặc gõ chữ số nhật thì nó tự covert theo chữ số Latin

thì replace chuỗi nhập vào thôi, cái này là vấn đề ngữ nghĩa rồi

5 Likes

Cậu cần phải convert full-width thành half-width trước (chữ số Nhật mà cậu đưa ra được gọi là full-width. Chữ số bình thường được gọi là half-width).
Full-width khác half-width 65248 đơn vị. Vậy nên khi cậu detect được xâu đầu vào là full-width, cậu chỉ cần duyệt từng chữ cái trong xâu, trừ nó đi 65248 để ra chữ cái half-width tương ứng, sau đó append nó vào 1 object StringBuilder cho kết quả cuối cùng là được.

Hope it helps!

7 Likes

Unicode có dạng NKFC/NKFD để normalize các ký tự giống nhau về ngữ nghĩa thành ký tự giống nhau, xài NKFC là được:

x = Convert.ToDecimal(valueString.Normalize(NormalizationForm.FormKC));

lưu ý là nó convert luôn những ký tự superscript hay subscript thành số tương ứng luôn nha :V như “22²₂” nó convert thành “2222” hết :V


thêm link: https://unicode.org/faq/normalization.html

NFC is the best form for general text, since it is more compatible with strings converted from legacy encodings. NFKC is the preferred form for identifiers, especially where there are security concerns (see UTR #36). NFD and NFKD are most useful for internal processing.

NKFC xài để nhận dạng text nè :V

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?