Cắt bỏ dấu tiếng Việt

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,436
Nghề nghiệp
Bác sĩ
Hai2Hai​

Khái niệm về Font chữ Việt

Khi nói về font có 3 vấn đề cần phải chú ý:

Bạn có thấy các fonts như Arial, Time News Roman, .vnTime, .vnArial,... không? Cái đó người ta gọi là font (nói nôm na thì font là thể hiện cái bề mặt của cái chữ mà bạn gõ vào, bạn chọn font khác nhau thì chữ của bạn sẽ thể hiện khác nhau trên chương trình (winword hay excel chẳng hạn). OK?

Bảng mã​

Có khá nhiều bảng mã như UNICODE, VNI Windows, TCVN3 (ABC), v.v... Cái này hơi khó giải thích cho bạn hiểu. Nhưng thôi, bạn cứ hiểu là Unicode là bảng mã chuẩn quốc tế và ai trên thế giới này cũng đọc được mà ko cần gửi đúng font, còn "ABC" của bạn thì chính là TCVN3 mà "xưa kia" ở các tỉnh miền bắc này rất hay sử dụng và còn sử dụng lay lắt cho tới tận ngày nay).


Mối quan hệ giữa Bảng mã và Fonts​

Thường thì các fonts được thiết kế dựa trên các bảng mã. Ví dụ .vnTime, .vn(***) thì được design theo TCVN3, Time News Roman, Arial, Tahoma, Veranda,... là những font chuẩn của windows (win98 trở lên) thì thiết kế là nhưng Unicode font. VNI.... thì tuy là 2 bytes nhưng là theo bảng mã VNI windows, v.v....

Phần mềm gõ tiếng Việt​

PM gõ tiếng việt là CÔNG CỤ để bạn có thể gõ chữ theo laọi bảng mã mà bạn chọn. Hiện nay có rất nhiều Phần mềm gõ tiếng việt (ABC của Quách Tuấn Ngọc, VietKey của anh Tuấn - nhóm Vietkey, Vietware, Unikey, v.v...) và chỉ có ABC là chỉ hỗ trợ mỗi bảng mã TCVN3 thôi, còn lại hầu hết các PM khác đều hỗ trợ tất cả các bảng mã nói trên mà cụ thể là Vietkey và Unikey

Như vậy, khi bạn cài Unikey (tôi khuyên bạn nên dùng cái này) và Vietkey thì bạn yên tâm là gõ được theo mọi bảng mã nhé (và ko bị lạc hậu).

Nói dài dòng như vậy, không biết bạn có biết Unikey, Vietkey, ABC,... khác nhau như thế nào chưa?

Để có được Unikey, bạn chỉ cần Google "Download Unikey" hoặc làm tương tự với tất cả các phần mềm khác.

Unikey


Sau khi cài đặt bạn làm như thế này:

1. Copy vùng cần bỏ dấu (tô sáng vùng cần bỏ dấu rồi nhấn Ctrl + C)
2. Bấm tổ hợp: Ctrl + Shift + F6.
3. Chọn ô "Loại bỏ dấu".
4. Chọn ô "Chuyển mã clipboard"
5. Click vào nút "Chuyển mã"
6. Quay lại Word hay Excel, nhấn Ctrl + V.

VietPad​

Có một phần mềm nữa cũng cho phép bạn loại bỏ dấu cũng như điền dấu thêm vào, chẳng hạn:
Kế toán quản trị -> Ke toan quan tri
Ke toan quan tri -> Kế toán quẫn trí

Đó là Vietpad bạn có thể download tại ĐÂY
 
Code

Bài của Hai2 Hai​

Đây là code cũ lâu lắm rồi, đoạn này chuyển từ chuỗi có dấu (mã TCVN3) sang chuỗi không dấu. (Bạn có thể sáng tạo, làm cho VNI, Unicode,... nhé)

Trích nguyên văn:

Public Function TCVN3ToVNWithoutMark(ByVal strTCVN3 As String) As String


'* Name: TCVN3ToVNWithoutMark *

'* Purpose: Convert string in TCVN3 format to vietnamese string without mark *

'* Returns: Vietnamese string without mark *



On Error GoTo TCVN3ToVNWithoutMark_Error
Const strTCVN3Vowels = "¸µ¹¶·©ÊÇËÈÉ¢¨¾»Æ¼½¡®§ÐÌÑà ŽÏªÕÒÖÓÔ£ãßäáâ«èåéæ礬íêîà «ì¥óïñòô­øõùö÷¦Ý×ÞØÜýúþûü"
Const strVNWithoutMarkVowels = "aaaaaaaaaaaAaaaaaaAdDeeeeeeeeeeeEooooooooooooOooo ooooOuuuuuuuuuuuUiiiiiyyyyy"

Dim lngVowelPosition&, i&
Dim strTemp As String

strTemp = Trim$(strTCVN3)

If Len(strTemp) = 0 Then
GoTo TCVN3ToVNWithoutMark_Done
End If

'// Convert TCVN3 string to Vietnamese string without mark
For i = 1 To Len(strTemp)
lngVowelPosition = InStr(1, strTCVN3Vowels, mID$(strTemp, i, 1), vbBinaryCompare)
If lngVowelPosition <> 0 Then
strTemp = left$(strTemp, i - 1) & mID$(strVNWithoutMarkVowels, lngVowelPosition, 1) & mID$(strTemp, i + 1)
End If
Next

'// Return vietnamese string without mark
TCVN3ToVNWithoutMark = strTemp

TCVN3ToVNWithoutMark_Done:
Exit Function

TCVN3ToVNWithoutMark_Error:
Resume TCVN3ToVNWithoutMark_Done
End Function

Thực ra viết như thế này chưa phải là tối ưu vì cứ mỗi vòng for nó lại tính lại Len(strTemp) 1 lần làm cho vòng for chậm đi 1 chút
For i = 1 To Len(strTemp)
...
Next

Đáng ra phải viết

Dim l&

l = Len(strTemp)

For i = 1 To l
....
Next

mới "xịn"
 
Upvote 0
Web KT
Back
Top Bottom