vanle33
Thành viên gạo cội




- Tham gia
- 30/10/08
- Bài viết
- 5,962
- Được thích
- 4,009
- Giới tính
- Nam
Em có down về 1 bản giá như sau
Không hiểu font chữ trong đó là font gì mà có rất nhiều ký tự lạ. Mong các bạn chuyển toàn bộ các dữ liệu ở cột A về font Times news roman hoặc VnTime
Thanks!
Hay qúa . Ok rồi bác ahBạn dùng Unikey với mã nguồn là UTF-8 và đích là Unicode thử xem
Hay qúa . Ok rồi bác ah
Em đang định chuyển toàn bộ hàng thành cột
Sau khi copy lại thì tự chuyển thành các cột rồi. Đúng là 1 công đôi việc. hiii
Đó là mã nguồn gì đó bác? Em chưa hiểu về mã đó lắm
1) Sao em không thấy Save as kiểu Unicode sau khi mở file bằng Note Pad nhỉ??Ai mà biết đâu nè. Cứ mở Unikey lên, thử từng em đến khi được thì thôi
Nhưng thường thì với file csv, tôi để ý thấy nếu người ta muốn hiển thị tiếng Việt có dấu thì người ta sẽ Save kiểu UTF-8
Vậy, ta cũng có cách chuyển đổi mà không cần đến Unikey:
- Mở file csv bằng Notepad
- Save As kiểu Unicode
- Xong, mở Excel, import file csv đã save Unicode khi nãy vào
Em save as được rồi nhưng sao khi mở lại file đó bằng Excel thì các font chữ vẫn bị lỗi???
Có phải open file bình thường không bác? hay import như thế nào ạ?
Bác ndu cho em hỏi làm sao xóa dấu nháy trong 1 số Cell ví dụ : '127141860000Làm cho bạn đây
Bác ndu cho em hỏi làm sao xóa dấu nháy trong 1 số Cell ví dụ : '127141860000
Em làm thử theo cách bài #27 http://www.giaiphapexcel.com/forum/showthread.php?71773-L%C3%A0m-sao-%C4%91%E1%BB%83-x%C3%B3a-d%E1%BA%A5u-nh%C3%A1y-trong-Cell/page3
nhưng không được??
1) Sao em không thấy Save as kiểu Unicode sau khi mở file bằng Note Pad nhỉ??
2) em làm theo cách bài #2 của bác thấy có lỗi ở cột B khá nhiều chữ ví dụ : L’ XO QUẢ GA , CHỐT PHAO X‚NG , BÁT PHỐT TRƯšC , NAN HOA TRƯšC CH‚N D€I ....
và còn nhiều chữ khác nữa. Phải sửa thế nào vậy bác?
Cám ơn bác, ở topic này em đã có file chuyển được mã đọc được rồi.Bộ mã chuyển đổi Unicode utf-8 của Unikey có một số lỗi. Tôi cũng không hiểu rõ có phải là do cơ chế định nghĩa bộ mã đầu vào của bác Phạm Kim Long bị sai hay không nhưng có một số ký tự đánh dấu bị lầm, đặc biệt là những nguyên âm phức có dấu nặng (ự,ậ, ặ ...vv). Xem hình ảnh kèm theo!
Ví dụ:
TẤM ÄỆM thực ra là TẤM ĐỆM và phải có thêm 1 dấu † để đặt dấu nặng trong khi Unikey chỉ dùng á» để thể hiện chữ Ệ
Chính vì mã đầu vào bị sai nên mã đầu ra cũng bị sai khi dùng Unikey để chuyển mã.
Khi tôi dùng Ultraedit để chuyển bộ mã Utf-8 của tiếng Việt cho công cụ chuyển mã thì phát hiện ra sự khác biệt này.
Xin chia sẻ!
View attachment 109851
Bộ mã chuyển đổi Unicode utf-8 của Unikey có một số lỗi. Tôi cũng không hiểu rõ có phải là do cơ chế định nghĩa bộ mã đầu vào của bác Phạm Kim Long bị sai hay không nhưng có một số ký tự đánh dấu bị lầm, đặc biệt là những nguyên âm phức có dấu nặng (ự,ậ, ặ ...vv). Xem hình ảnh kèm theo!
Ví dụ:
TẤM ÄỆM thực ra là TẤM ĐỆM và phải có thêm 1 dấu † để đặt dấu nặng trong khi Unikey chỉ dùng á» để thể hiện chữ Ệ
Chính vì mã đầu vào bị sai nên mã đầu ra cũng bị sai khi dùng Unikey để chuyển mã.
Khi tôi dùng Ultraedit để chuyển bộ mã Utf-8 của tiếng Việt cho công cụ chuyển mã thì phát hiện ra sự khác biệt này.
Xin chia sẻ!
View attachment 109851
Cảm ơn bác Siwtom.
Thực ra bài viết trên em cũng chỉ đoán theo cơ chế vì chưa tự mình giải thích được câu chuyện giống như chủ đề bài này. Có nhiều trường hợp dùng Unikey với Utf-8 thì đều bị lỗi như vậy. Nếu bác thử gõ với điều kiện chuyển bảng mã sang UTF-8 thì cũng gặp điều tương tự.
Ví dụ: nếu chuyển sang dùng UTF-8, em gõ chữ ộ=á», ệ=á» và dùng Unikey chuyển những cái đó ngược lại thành unicode thì không được. Còn một số ít ký tự khác cũng gặp vấn đề tương tự. Tuy nhiên khi dùng Ultra Edit để convert thì lại được - vì thế em mới quy tội cho vụ chuyển bảng mã.
Ví dụ đoạn văn sau, em gõ trong Ultra Edit rồi chuyển sang Utf với công cụ chuyển mã của nó
TẤM NỆM NÀY QUÁ TỆ CẦN PHẢI THAY ĐỔI HỆ THỐNG SẢN XUẤT
Tấm nệm này quá tệ, cần phải thay đổi hệ thống sản xuất
TẤM NỆM NÀY QUà TỆ CẦN PHẢI THAY Äá»”I HỆ THá»NG SẢN XUẤT
Tấm nệm nà y quá tệ, cần phải thay đổi hệ thống sản xuất
Sau đó chuyển ngược, chuyển xuôi đều được nhưng Unikey thì thất bại. Điều đó làm em có suy đoán là bộ chuyển đổi hoặc ít ra thuật toán chuyển đổi có vấn đề, thêm nữa khi gõ bằng Unikey cũng bị tội như thế. Thành ra đó là căn nguyên. Em sẽ thử đọc đoạn code đó của bác Long và phân tích xem thế nào.
Khi lập bảng đầu vào cho công cụ chuyển mã, em thấy vụ này nên đã tự mình bổ sung thêm dấu cho mấy nguyên âm lỗi đó thì lại không bị sao.
Kính bác giải thích giùm cho em và mọi người! Còn về kỹ năng sử dụng bộ chuyển mã của Unikey thì em tin không có vấn đề gì vì em sử dụng nó từ 2002 đến giờ!
Liên kết công cụ ở đây để bạn Văn thử nhé.
http://www.sfdp.net/tai-lieu-khac/bocongcuchuyenma/Functions.rar
Sau khi nghiên cứu code chuyển đổi của bác Long, thực tế em thấy là Unikey đúng là không sai gì cả, các giả định trước đây về vấn đề của Unikey liên quan đến Utf-8 đều không đúng nhưng em phát hiện ra một điểm lý thú:
Nếu dùng bộ gõ Unikey chuyển sang bảng mã UTF-8 Literal, một số ký tự sẽ không hiển thị được.
Ví dụ khi gõ chữ Ệ thì trên màn hình soạn thảo hiển thị là "á»". Trên thực tế, đoạn ký tự này gồm 3 ký tự với mã ASCII lần lượt là 225, 187 và 134.
Điều đặc biệt ở đây là: Ký tự số 134 không hiển thị ra nhưng khi dùng hàm Char trong Excel để chuyển đổi sang mã ASCII thì nó là "†". Khó hiểu ở chỗ là một số phần mềm quản trị dữ liệu hiển thị được ký tự này thành hình thánh giá trong khi một số phần mềm soạn thảo lại không làm được thế!
Khi nghiên cứu thêm chút nữa về UTF-8 thì em phát hiện ra rằng có một số mã có kết hợp với các ký tự mở rộng trong bảng mã ASCII. Hiện tại em vẫn Không rõ tại sao các trình quản lý CSDL lại chuyển nó thành dấu hiển thị được như vậy trong dữ liệu?
Vậy là đã rõ, bộ gõ Unikey không có lỗi, chỉ có vấn đề là tại sao cùng ký tự đó, các bộ soạn thảo đều không hiển thị được.
Đấy cũng là điều lý giải tại sao, bộ chuyển mã của Unikey bị lỗi. Tất cả các ký tự không hiển thị được như thế nó không đọc được và dẫn đến chuyển mã sai. Ví dụ của bạ Văn là một trường hợp điển hình. Tất cả các đoạn có tình huống như trên thì Unikey chỉ chuyển đổi 2 ký tự đầu của mã UTF-8 trong khi ký tự cuối có mã 134 nó lại bỏ qua.
Vụ này kính nhờ bác Switom nghiên cứu giúp để khai sáng cho bọn em.
Sau một hồi nghiên cứu thì em cũng đã phát hiện ra lý do của vấn đề trong chuyển đổi mã Unicode sang Utf-8 và ngược lại của Unikey. Tất nhiên, điều này cũng gây ảnh hưởng đối với cả quá trình nhập liệu khi sử dụng bảng mã Utf-8.
Khi người dùng chọn chế độ nhập liệu ở dạng bảng mã Utf-8, cơ chế Hook bàn phím của Unikey xử lý trực tiếp mã nhập vào sau đó chuyển nhóm ký tự nhập vào sang bảng mã tương ứng được chọn trước đó. Khi quan sát cách thức xử lý với một số ký tự đặc biệt (như trong trường hợp em đã nêu trong các bài trước) như chữ Ệ, Ộ ...vv có các ký tự mở rộng trong bảng mã ASCII, Unikey thể hiện một số điểm như sau:
Chuỗi đầu vào cần nhập là "KỶ NIỆM, Ở CỬA HỘI "
(1) Nếu nhập trực tiếp sử dụng bảng mã Utf-8, kết quả là "Ká»¶ NIá»M á» CỬA Há»I". Sau đó sử dụng lại chuỗi này và chuyển sang Unicode thì kết quả đúng như chuỗi ban đầu. Tuy nhiên, khi nhập trực tiếp trong Excel thì khoảng trắng mà ta nhìn thấy trước chữ M hoặc I sẽ không có mặc dù trên thực tế là có một ký tự ở đó (nếu dùng Word để nhập thì khoảng trắng đó sẽ hiện ra).
(2) Nếu nhập chuỗi Unicode dựng sẵn, sử dụng công cụ chuyển đổi từ Unicode sang UTF-8 của Unikey, dán từ Clipboard vào màn hình soạn thảo, chuỗi kết quả là: "Ká»¶ NIỆM, Ở CỬA HỘI ".
Sau đó cũng sử dụng chính chuỗi này để chuyển ngược lại từ UTF-8 sang Unicode thì kết quả giống như cũ "KỶ NIỆM, Ở CỬA HỘI"
Điểm đáng ngạc nhiên ở đây là Ký tự "†" chỉ hiển thị khi nó được xử lý trong Clipboard còn khi thao tác trực tiếp trong màn hình soạn thảo thì nó không hiển thị ra.
Tiếp nữa, nếu lưu file theo trường hợp 1 thành dạng CSV (kiểu dữ liện đơn giản nhất). Kết quả là chuỗi vừa nhập được lưu thành "Ká»¶ NiỆM Ở CỬA HỘI". Dùng Unikey chuyển sang Unicode (bằng cách chép dán) thì xong, kết quả bị lỗi "KỶ Ni†M ž CỬA H˜I". Khi kiểm nghiệm với chuyển mã không dùng Clipboard thì lỗi này không gặp phải.
Mặc dù chúng ta không sai trong thao tác, kết quả cuối cùng lại bị sai (tương tự như vậy, file của bạn Văn cũng không có vấn đề gì). Điều này làm nảy sinh nghi vấn về cơ chế đẩy dữ liệu ra của Unikey. Có vẻ như Unikey đã không làm một việc là chuyển ký tự số mở rộng 134 này từ Byte Stream sang kiểu chuỗi (Nếu em nói sai các bác cứ dạy, vì đây chỉ là một dạng suy đoán) nên màn hình soạn thảo sẽ không hiển thị ký tự nhưng khi lưu số liệu các phần mềm soạn thảo đã chuyển các ký tự này về dạng nguyên thủy của nó. Và bản thân Unikey, khi gặp trường hợp này, phần lấy số liệu cho công cụ chuyển mã của phần mềm có thể đã không kiểm soát được tình huống này.
Điều này cũng thấy rõ hơn, nếu nhập số liệu tương tự vào trình quản lý Dữ liệu của MYSQL hoặc SQL SERVER thì các ký tự không nhìn thấy đó lại được chuyển thành dạng chuỗi "†".
Như thế có thể tạm kết luận là, riêng với bộ mã Utf-8, Unikey bị thiếu sót trong việc xử lý dữ liệu, và điều này là việc chúng ta cần nắm được để tránh khi thao tác với số liệu có liên quan đến Utf-8, đặc biệt là trong khi xử lý số liệu liên quan đến Web vì chuẩn mã hóa thông dụng đối với Unicode hiện tại đều dùng Utf-8.
Trong những trường hợp như vậy (chuyển qua lại từ Unicode sang Utf-8), ta nên tránh dùng công cụ chuyển mã của Unikey theo dạng thức copy/chuyển mã/ dán để không bị hỏng số liệu vì cơ chế này có thể đang có lỗi như kể trên.
Em xin phép được chia sẻ vài điểm như vậy!