Thắc mắc: Số ký tự của 1 chuỗi tiếng Việt có dấu

Liên hệ QC

xuongrongdat

Có bao giờ bạn tự hỏi "Tôi là ai?"
Tham gia
30/6/08
Bài viết
1,704
Được thích
1,574
Donate (Momo)
Donate
Nghề nghiệp
Vô tư cùng bạn bè đi khắp nơi.
Mọi người cho mình hỏi, mình muốn đếm số ký tự của 1 chuỗi có chứa tiếng Việt có dấu. Công ty mình hay đặt tên thư mục và tên file tiếng Việt có dấu, có khoảng cách, ký tự đặc biệt búa xua.
Ví dụ: Trần Văn An => bao nhiêu ký tự? (Có 2 khoảng cách)

Nếu là: Tran Van An => có 11 ký tự thì mình biết rồi.

Xin cảm ơn.
 
Cũng vậy. Có 2 cái cũng vậy:
- unicode tiếng Việt có dấu cũng vậy
- Không dấu đếm cách nào, có dấu đếm cũng vậy
 
Thế theo bạn chuỗi sướng quá có mấy ký tự?

Dùng hàm LEN thôi.
 
Tùy vào bảng mã sử dụng khi nhập liệu. Bảng mã 1 byte thì chuỗi có dấu và không dấu có độ dài bằng nhau nhưng bảng mã 2 byte thì chuỗi có dấu dài hơn.
 
Ý chủ thớt đang thắc mắc vụ tiếng Việt từ mấy bài trước gặp phải: Nhìn thấy cùng một ký tự như độ dài ký tự khác nhau.

Đấy là liên quan bảng mã của ký tự (như bài trên nêu).
Ví dụ ký tự "à": Nếu gõ bằng bảng mã Unicode dựng sẵn thì độ dài ký tự = 1, bằng bảng mã Unicode tổ hợp thì độ dài ký tự = 2.
 
Ý chủ thớt đang thắc mắc vụ tiếng Việt từ mấy bài trước gặp phải: Nhìn thấy cùng một ký tự như độ dài ký tự khác nhau.
Không phải bác. Em hỏi vấn đề này là do có 3 người trong phòng em trong đó có em đang vướng vụ: mở 1 file word, excel, pdf bất kỳ nào mà có đường dẫn quá dài trên 256 ký tự thì không mở lên được. Em muốn đếm độ dài ký tự của path thôi.
Còn cái vụ thấy vậy mà không phải vậy nó cũng là 1 sự lạ đối với em.
Ví dụ ký tự "à": Nếu gõ bằng bảng mã Unicode dựng sẵn thì độ dài ký tự = 1, bằng bảng mã Unicode tổ hợp thì độ dài ký tự = 2.
Rồi sao mình biết cái nào là dựng sẵn cái nào là tổ hợp bác? Mắt thường phân biệt được không?
 
Em muốn đếm độ dài ký tự của path thôi.
Độ dài nào cũng là độ dài. Hàm Excel và hàm VBA chỉ có một.
Rồi sao mình biết cái nào là dựng sẵn cái nào là tổ hợp bác? Mắt thường phân biệt được không?
Cũng vẫn là hàm tính độ dài.
Lạ 1 điều là với trình độ của bạn mà hỏi toàn những câu hỏi thiếu căn bản như vậy.
 
Độ dài nào cũng là độ dài. Hàm Excel và hàm VBA chỉ có một.

Cũng vẫn là hàm tính độ dài.
Lạ 1 điều là với trình độ của bạn mà hỏi toàn những câu hỏi thiếu căn bản như vậy.
Con không biết bác có thực sự hiểu trình độ của con tới đâu không!
Trình độ của con là hỏi những gì con chưa biết, còn những gì con biết rồi con sẽ không hỏi.

Bài này con hỏi về cách đếm ký tự của tên thư mục và file trong Window, con đăng trong khu vực Tin học văn phòng khác vì không biết nó có giống với bên Excel không. VBA con chưa biết cơ bản nên mấy bài tập của mấy chú bác anh chị trên GPE đưa ra con không biết làm. Nên bác nói hàm Excel với VBA chỉ có 1 con cũng nghe thế thôi chứ không rành.
Dựng sẵn hay tổ hợp con cũng không biết khác nhau chỗ nào. Unicode 1 byte 2 byte con cũng không rõ nốt.
Đó là trình độ của con. Thiếu căn bản lắm bác à.
Lạ 1 điều Tầm cỡ bác sao lại đi thắc mắc trình độ của con chỉ đáng tuổi con cháu bác mãi thế nhỉ?!
 
hàm Excel với VBA chỉ có 1 con cũng nghe thế thôi chứ không rành.
...
Lạ 1 điều Tầm cỡ bác sao lại đi thắc mắc trình độ của con chỉ đáng tuổi con cháu bác mãi thế nhỉ?!
Hàm gì thì bài 3 đã trả lời.
Tôi thấy lạ vì:
Trình độ của bạn thì tôi nghĩ không thấp. Bạn đã tham gia diễn đàn trên chục năm, bạn đã có 1481 bài viết, đã trả lời rất nhiều lần cho những bài khó hơn bài này.
Bạn cũng phải đọc hàng ngàn bài viết, nhấn like không ít, và bao gồm nhấn like cho những bài trả lời vấn đề tổ hợp và dựng sẵn. Trong khoảng 1 tháng nay có ít nhất 2 chủ đề nói về việc này, trong đó anh batman1 giải thích 1 lần, befaint giải thích 1 lần và bạn đã nhấn like cho những bài đó.
 
Hàm gì thì bài 3 đã trả lời.
Tôi thấy lạ vì:
Trình độ của bạn thì tôi nghĩ không thấp. Bạn đã tham gia diễn đàn trên chục năm, bạn đã có 1481 bài viết, đã trả lời rất nhiều lần cho những bài khó hơn bài này.
Bạn cũng phải đọc hàng ngàn bài viết, nhấn like không ít, và bao gồm nhấn like cho những bài trả lời vấn đề tổ hợp và dựng sẵn. Trong khoảng 1 tháng nay có ít nhất 2 chủ đề nói về việc này, trong đó anh batman1 giải thích 1 lần, befaint giải thích 1 lần và bạn đã nhấn like cho những bài đó.
Bài 3. Hàm LEN tất nhiên con biết chứ. Bác batman có thể nhầm con hỏi bên Excel đấy. Bài này con hỏi bên Windows. Nếu cả 2 bên đều tính giống nhau thì bài này coi như đã được giải quyết.
Cảm ơn bác đã xem hồ sơ lịch sử của con ở GPE này. Nick thì thâm niên chục năm đúng rồi nhưng con đã từng chia sẻ với mọi người rằng đến mãi tháng 03/2020 con mới thực sự hoạt động. Bác xem lại lịch sử của con thiệt kỹ hơn nữa sẽ hiểu. Mà chắc không cần xem đâu bác. Con có là gì đâu.
148x bài viết và đã trả lời những bài khó hơn ư? Thật vinh hạnh con đã góp 1 chút gì đó vào gia đình GPE mình. => con nhờ Google 1 chút, nhờ những bài khó tương tự mà có cao thủ giải gần đó thì con mượn bài giải giúp thôi, 1 chút xíu là thực lực những gì con biết con nhớ. Không hẳn là phản ánh đúng trình độ con tới đó đâu. Con dùng Sumproduct giải 1 bài tương tự cho thành viên mới, chứ công năng Sumproduct có 10 con chỉ biết có 1-2 thôi.
Bác đã xem được con Thích, Yêu thích,… nói chung là đủ cả các loại Phản ứng mà diễn đàn có => đúng vậy, đơn giản là con muốn 1 phần cảm ơn người giúp nhiệt tình dù là không phải giúp mình, có khi người được giúp quên cả cảm ơn lẫn Thích, 1 phần là tăng tương tác cho GPE mình đó, 1 phần để lại vết tích của bản thân khắp GPE vì con thích thế,… chứ chưa hẳn là con đã đọc hết bài viết con tương tác, hoặc có đọc con cũng chưa chắc hiểu. Vậy đó bác à.

Nếu con nghĩ con hỏi ra những điều cơ bản mà lại luôn được bác so với trình độ cá nhân thì chắc con không dám hay đem lên hỏi GPE nhà mình nữa. Có những vấn đề (con không biết cơ bản hay nâng cao) con đem lên hỏi là vì nhất thời không biết gõ từ khoá ra sao trên Google thôi thì đăng lên đây hỏi có khi nhanh hơn. Mà nhanh hơn thật vì GPE mình thật lắm “cao nhân”, con để trong ngoặc kép vì các cao nhân thực thụ trên GPE mình không thích tự nhận hoặc một ai gọi mình là cao nhân. :)

Cảm ơn bác vì những công sức của bác dành cho 1 diễn đàn tuyệt vời và cảm ơn bác có những phút giây dành riêng cho nick xuongrongdat.

Kính chào và con vẫn sẽ ở đây tiếp tục “làm phiền” bác cùng gia đình GPE vậy.
 
Nếu gõ bằng bảng mã Unicode dựng sẵn thì độ dài ký tự = 1, bằng bảng mã Unicode tổ hợp thì độ dài ký tự = 2.
Bài #4 nói về 1 byte và 2 byte. Mà đã nói về UNICODE thì làm gì có 1 bai. Nói thế là sai, ít ra là không chính xác. Nói thế này thì được: unicode dựng sẵn là 1 ký tự, còn unicode tổ hợp là sự tổ hợp, là sự ghép của 2 ký tự unicode thành phần. Bản thân mỗi ký tự unicode là 2 bai. Không có chuyện 1 bai ở đây.

Nói là bảng mã unicode dựng sẵn và bảng mã unicode tổ hợp cũng là nói sai, nhiều người nói thế và chấp nhận cho nhau thôi. Chỉ có 1 bảng mã là UNICODE.
Rồi sao mình biết cái nào là dựng sẵn cái nào là tổ hợp bác?
99% mắt thường không phân biệt được. Như trong ví dụ của tôi "ớ" là ký tự unicode tổ hợp được "tổ hợp" từ 2 ký tự "ơ" có mã là 01A1 và ký tự dấu sắc có mã là 0301. Nhìn thì biết mỗi ký tự này là 2 bai.

hinh1.jpg


hinh2.jpg

Tuy nhiên các chương trình xịn (vd. các chương trình soạn thảo văn bản xịn như notepad, word, ...) thì khi hiển thị văn bản chúng "ghép" 2 ký tự trên với nhau để thành "ớ". Đôi khi chương trình a ma tơ thì hiển thị 2 ký tự trên "cạnh" nhau. Vì thế thường là bằng mắt không phân biệt được. Nếu nói về độ dài của path thì tôi đoán là Windows cũng sẽ đếm ký tự như hàm LEN. Vậy thì kiểm tra bằng hàm LEN thôi.
 
Lần chỉnh sửa cuối:
Dựng sẵn hay tổ hợp con cũng không biết khác nhau chỗ nào. Unicode 1 byte 2 byte con cũng không rõ nốt.
"ớ" trong bài của tôi được tổ hợp từ 2 thành phần - 2 ký tự khác cũng từ bảng mã unicode. Còn 1 "ớ" khác nhưng chỉ là 1 ký tự unicode có mã là 1EDB

hinh3.jpg

Bạn cứ tưởng tượng như thế này. Bạn biết chơi trò xếp chữ?. Bạn muốn có 1 bộ chữ để chơi. Bạn đến ông thợ có biển hiệu: DỰNG SẴN. Thế là ông ta cho bạn một vật được đúc bằng chì có hình hài là "ớ". Khi xếp chữ đến lúc cần thì bạn lôi cái ký tự kia ra. Nếu ông thợ bận mà bạn cần gấp thì bạn tới hiệu TỔ HỢP. Nhưng ông thợ này không đưa cho bạn 1 vật đúc có hình hài "ớ". Ông ta đưa cho bạn 2 vật đúc: 1 vật có hình hài "ơ" và 1 vật có hình hài dấu sắc. Khi chơi trò xếp chữ mà lúc cần "ớ" thì bạn phải lấy tận 2 vật đúc -> ghép chúng sao cho dấu sắc ở trên "ơ" -> khi có "ớ" rồi thì mới "trình làng". Ở trường hợp 1 thì chỉ cần lôi ra 1 vật đúc "ớ" rồi trình làng thôi. "ớ" ở đây là 2 phần đã được đúc và ghép sẵn làm một, chỉ là 1 vật thôi.

Không có unicode 1 bai đâu. Đã là unicode thì là 2 bai.

Trong toàn bộ bảng mã UNICODE có cả 3 ký tự riêng biệt với mã là 01A1 ("ơ"), 0301 (dấu sắc) và 1EDB ("ớ"). Nếu ghép 2 ký tự unicode có mã là 01A1 và 0301 thì bạn có "ớ" tổ hợp, còn nếu dùng 1 ký tự unicode có mã là 1EDB thì bạn có "ớ" dựng sẵn.
 
Lần chỉnh sửa cuối:
Người Việt nói không chính xác nên cứ nghĩ nó là đúng. Nói là có 2 DẠNG unicode thì đúng, quá đúng. Nhưng nói là có 2 BẢNG MÃ unicode là sai Chỉ có 1 BẢNG MÃ unicode duy nhất mà thôi. Bác Phạm Kim Long cũng chỉ là người. Trên đời này không có ai là không có lúc nhầm lẫn. Kể cả bác Phạm Kim Long.

Tuy nhiên tôi cũng đã viết là: "nhiều người nói thế và chấp nhận cho nhau thôi.". Cái này thuộc phạm trù ngôn ngữ nên nếu hiểu nhau thì chấp nhận được. Bạn cho là có 2 BẢNG MÃ, tôi cho là có 1 BẢNG MÃ, thì bạn có thể cho là tôi dùng từ không chính xác, còn tôi cho là bạn dùng từ không chính xác. Nhưng chuyện ngôn từ không thực sự quan trọng lắm nếu nó không gây hậu quả nghiêm trọng. Còn chuyện unicode 1 bai unicode 2 bai là không có, viết thế dễ làm người khác hiểu sai.

Trong Unikey nếu nhấn nút "Hướng dẫn" thì sẽ có

unikey.jpg

Nhìn các vùng đỏ thì có thể hiểu Unicode là 1 BẢNG MÃ DUY NHẤT mà tổ hợp và dựng sẵn là 2 dạng của cùng một chuẩn chung.

Tranh luận là để làm sáng tỏ vấn đề. Nếu chỉ biết dùng gì đó để mỉa mai thì xin đừng.

Tôi dừng ở đây.
 
Lần chỉnh sửa cuối:
Nhắc nhở bác Phạm Kim Long sửa lại phần mềm thôi.

View attachment 269348
Sửa lại là bình thường, Nhưng ở đây có lẽ có định nghĩa riêng cho ngoại lệ của phần mềm
Vẫn đề cuối cùng vẫn là thống nhất - người ta luôn nói chữ này nhưng lại luôn muốn có nhiều để chọn và muốn chọn riêng nữa, nên tự làm khó thôi
 
Đơn giản bạn chỉ cần biết:
1. Do font chữ làm cho bạn thấy ký tự Việt trên màn hình, các font cổ lỗ cũ thì mượn hai ký tự để hiển thị tiếng Việt, nay quốc tế hóa, chỉ cần 1 ký tự. Bạn sẽ thấy IOS hay Android chỉ hỗ trợ gõ Unicode Telex.

Nếu bạn biết hình Emoji, gõ : ) ) thì sẽ nhìn thấy mặt cười. Nó tương tự cách người Việt tạo kiểu gõ cho Font, để nhìn thấy tiếng Việt.
2. Biết bảng mã ký tự chuẩn.
 
Web KT
Back
Top Bottom