-
RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn
Minh Tiên > 26-10-19, 11:29 AM
Chào cả nhà !
Sau 1 t/g mày mò mình phát hiện ra lỗi chuyển sai tập trung chủ yếu vào các chữ In hoa vì hàm dò tìm chữ In hoa ko thực hiện được, chỉ do được chữ thường.
Khắc phục: Khai báo có phân biệt chữ In và chữ thường.
Cụ thể: Thay Option Compare Database thành Option Compare Binary trong Module.
Mình đang dùng office 365 hoạt động OK, ko biết ACE dùng Office khác thế nào. Xin chia sẻ.
Thân./. -
RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn
ongke0711 > 26-10-19, 12:08 PM
(26-10-19, 11:29 AM)Minh Tiên Đã viết: Chào cả nhà !
Sau 1 t/g mày mò mình phát hiện ra lỗi chuyển sai tập trung chủ yếu vào các chữ In hoa vì hàm dò tìm chữ In hoa ko thực hiện được, chỉ do được chữ thường.
Khắc phục: Khai báo có phân biệt chữ In và chữ thường.
Cụ thể: Thay Option Compare Database thành Option Compare Binary trong Module.
Mình đang dùng office 365 hoạt động OK, ko biết ACE dùng Office khác thế nào. Xin chia sẻ.
Thân./.
Việc khắc phục đơn giản vậy mà mình không nghĩ ra.
Còn việc chuyển đổi từ Tổ hợp sang dựng sẳn thì tôi định làm như sau:
- Gõ toàn bộ các ký tự có dấu TV theo kiểu tổ hợp rồi đổi sang mã Hex. Đưa vào mảng tohop_bytes
- Gõ toàn bộ các ký tự có dấu TV theo kiểu dựng sẵn rồi đổi sang mã Hex. Đưa vào mảng dungsan_bytes
- Khi dò từ ký tự trong chuỗi, chuyển sang Hex (dùng AscW()) rồi đối chiếu vào mảng nào mình cần rồi đối chiếu với mảng kia, sau đó dùng hàm Chrw() để chuyển thành ký tự.
- -
RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn
Minh Tiên > 26-10-19, 01:16 PM
(26-10-19, 12:08 PM)ongke0711 Đã viết:
Vụ này Tiên đã nghĩ cách làm rồi, chỉ cần quy ngược lại theo Code trên thôi. Dò mãng s_DungSan trước => trong S_ToHop. Mình có bảng Index của 2 mãng là OK(26-10-19, 11:29 AM)Minh Tiên Đã viết: Chào cả nhà !
Việc khắc phục đơn giản vậy mà mình không nghĩ ra.
Sau 1 t/g mày mò mình phát hiện ra lỗi chuyển sai tập trung chủ yếu vào các chữ In hoa vì hàm dò tìm chữ In hoa ko thực hiện được, chỉ do được chữ thường.
Khắc phục: Khai báo có phân biệt chữ In và chữ thường.
Cụ thể: Thay Option Compare Database thành Option Compare Binary trong Module.
Mình đang dùng office 365 hoạt động OK, ko biết ACE dùng Office khác thế nào. Xin chia sẻ.
Thân./.
Còn việc chuyển đổi từ Tổ hợp sang dựng sẳn thì tôi định làm như sau:
- Gõ toàn bộ các ký tự có dấu TV theo kiểu tổ hợp rồi đổi sang mã Hex. Đưa vào mảng tohop_bytes
- Gõ toàn bộ các ký tự có dấu TV theo kiểu dựng sẵn rồi đổi sang mã Hex. Đưa vào mảng dungsan_bytes
- Khi dò từ ký tự trong chuỗi, chuyển sang Hex (dùng AscW()) rồi đối chiếu vào mảng nào mình cần rồi đối chiếu với mảng kia, sau đó dùng hàm Chrw() để chuyển thành ký tự.
Thân./. -
RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn
Minh Tiên > 26-10-19, 01:32 PM
-
RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn
ongke0711 > 26-10-19, 07:15 PM
(26-10-19, 01:32 PM)Minh Tiên Đã viết: Bảng Index theo code trên !
Bảng Index
Thân./.
Tôi không nghĩ bảng mã này đúng đâu bạn. Bạn dùng bảng mã nào vậy?
Hiện nay nên dùng các bảng mã: Latin Extended A, Latin Extended Additional thì mới chính xác hơn.
Vd: Chữ "Ế" - Mã Decimal:
Dựng sẵn: 7870
Tổ hợp: 202 769 (kết hợp 2 bytes) -> cái khó nằm ở đây.
Khi chuyển từ dựng sẵn sang tổ hơp, nó phải dùng 2 byte để thể hiện ký tự: 202 cho ký tự "Ê" và 769 cho dấu sắc. Nhưng khi tôi kết hợp thì cái dấu sắc nó không nằm trên chữ "Ê" mà nó nằm kế bên.. Phải ngâm cứu thêm thôi.
-
RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn
Minh Tiên > 26-10-19, 08:13 PM
Vụ Byte biết jj đó .. họ đã làm giúp mình ở Private Sub InitVietnameseStr rồi (Ko để ý nữa).
Họ chạy tới đc thì mình chạy lui cũng đc thôi.
Chỉ cần tra trong Tổ hợp theo Dựng sẳn theo Index là OK (>15 mới có khác biệt).
Lấy 2 ký tự trong S_To_Hop mới hiển thị dấu !
Mình đã chạy Unicode Dựng sẳn sang Unicode Tổ hợp OK rồi.
Thay đổi code này:
Mã:Public Function SourceToDest(ByVal text As String, source As convert_source, dest As convert_dest) As String
Dim s As String, Temp As String, kytu2 As String
Dim n As Long, index As Long, k As Long
Dim nr As Long
If source = dest And source <> src_uni Then
SourceToDest = text
Exit Function
End If
InitVietnameseStr
text = text & " "
s = ""
n = 1
k = Len(text)
While n < k
nr = 0
Select Case source
Case src_uni
kytu2 = Mid(text, n, 1)
If source = src_uni Then
index = InStr(1, s_dung_san, kytu2)
If index > 14 Then
nr = (2 * index - 15)
n = n + 1
Else
nr = InStr(1, s_dung_san, kytu2)
n = n + 1
End If
End If
End Select
If nr > 14 Then
Select Case dest
Case dst_uni: kytu2 = Mid(s_to_hop, nr, 2)
End Select
End If
s = s & kytu2
Wend
SourceToDest = s
End Function
Mình lấy code cũ chưa làm cho các bảng mã khác nên để nguyên các Select Case và If (Chưa sắp xếp lại).
Mình đã text từ Access rồi Copy sang Excel lọc, ... => Kết quả OK.
ACE nhà ta text thử nhé !
Thân./.