Su dung unicode

657 views

Published on

Sử dụng UNICODE trong C VS6

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
657
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Su dung unicode

  1. 1. SỬ DỤNG UNICODE TRONG VISUAL C++ 6.0 Văn Chí Nam Khoa Công nghệ Thông tin, Trường ĐHKHTN TP.HCM (vcnam@fit.hcmuns.edu.vn) Ngày cập nhật: 25/05/2006GIỚI THIỆUUnicode đã trở thành bảng mã chuẩn trên toàn thế giới. Việc sử dụng Unicode trongcác ứng dụng trên hệ điều hành Windows (từ phiên bản Windows 2000 trở về sau) trởthành điều bắt buộc hiển nhiên. Song, việc hỗ trợ Unicode trên môi trường lập trìnhVisual C++ 6.0 không được mạnh mẽ cho lắm và gây nhiều khó khăn cho lập trìnhviên khi tạo các ứng dụng có sử dụng Unicode (trong trình bày, đọc và ghi file…).Bài viết này giới thiệu các thao tác cơ bản cần thiết ở mức đơn giản nhất để người đọccó thể dễ dàng tạo ứng dụng và sử dụng Unicode trong các ứng dụng được tạo.MỘT SỐ ĐIỂM LƯU ÝThiết lập thông sốThiết lập các thông tin sử dụng Unicode cho project- Thêm macro _UNICODE (chỉ sử dụng từ Windows 2000 trở lên). VàoProjectsSettings. Chọn tab C/C++ và category là Preprocessor.
  2. 2. - Thêm wWinMainCRTStartup vào trong Entry-point symbol. Chọn tab Link vàcategory là Output.Các DLL dùng cho UnicodeCác MFC DLL có dùng sử dụng ký tự U(nicode) trong tên. Nếu sử dụng thư việnMFC phiên bản 4.0, 4.2 thì có các DLL sau đây:- MFC40U.DLL- MFC42U.DLL- MFCO42UD.DLL- MFC42UD.DLL(Trong lúc cài đặt nếu không có chọn cài đặt các thư viện, DLL hỗ trợ Unicode thì cóthể chép các file này từ đĩa cài đặt của Visual C++).Sử dụng chuỗi UnicodeĐơn giản nhất khi sử dụng chuỗi unicode là sử dụng lớp CString của thư viện MFC.Tuy nhiên, lưu ý phải sử dụng thêm macro _T với các chuỗi trong các ứng dụng códùng Unicode.Ví dụ:CString str;str = _T(“Hello world”);Hoặc
  3. 3. MessageBox(_T(“This is a demo”));Gõ tiếng Việt Unicode trong Visual C++ 6.0Môi trường soạn thảo Visual C++ 6.0 không cho phép gõ Unicode tiếng Việt có dấudạng tổ hợp hoặc dựng sẵn như những chương trình soạn thảo văn bản khác. Thay vàođó, chúng ta phải sử dụng dạng Unicode C String được thiết lập sẵn trong các bộ gõtiếng Việt phổ biến hiện nay (như Unikey và Vietkey).Ví dụ:CString str;str = _T(“Minh hox1EA1 sx1EED x64x1EE5ng Unix63ox64x65”);MessageBox(str); //Minh hoạ sử dụng UnicodeĐọc và ghi file text UnicodeCó thể sử dụng các lớp CTextFileRead, CTextFileWrite và CTextFileBase của tác giảPEK từ trang web Code Project để sử dụng việc đọc và ghi file text Unicode (xemthêm tại địa chỉ http://www.codeproject.com/file/textfiledocument.asp ). Đây là cáclớp hỗ trợ việc đọc (CTextFileRead) , ghi (CTextFileWrite) các file text dạng ANSIhoặc Unicode (Unicode 16 bit – LE, Unicode 16 bit BE, UTF-8).Lớp CTextFileBase là lớp cơ sở cho 2 lớp đọc và ghi kế thừa. Qua lớp này chúng tacó thể xác định được loại encoding Unicode được sử dụng (GetEncoding),…Lớp CTextFileRead cho phép đọc từ dòng (ReadLine) hoặc đọc toàn bộ văn bản(Read).Lớp CTextFileWrite cho phép ghi một chuỗi Unicode xuống file (Write) và ghi ký tựxuống dòng (WriteEndl).Ví dụ: Đọc dòng đầu tiên từ tập tin test.txt.CTextFileRead file("test.txt");CString str;file.ReadLine(str);file.Close();hoặc ghi một chuỗi xuống tập tin test.txt sử dụng encoding UTF_8.CTextFileWrite file("test.txt", CTextFileBase::UTF_8);file.Write(str);file.Close();
  4. 4. MINH HOẠYêu cầuXây dựng ứng dụng minh hoạ cho phép hiển thị Unicode trên các control của nó nhưhình ảnh dưới đây:Thiết kế dialog
  5. 5. Thiết lập chuỗi tiếng Việt có dấu Unicode cho các controlvoid CTestUnicodeDlg::OnButton1(){ // TODO: Add your control notification handler code here CWnd *pWnd; pWnd = GetDlgItem(IDC_STATIC1); //Dòng này viết bằng Unicode pWnd->SetWindowText(_T("x44òng x63hx1EEF này vix1EBFtx62x1EB1ng Unix63ox64x65")); pWnd = GetDlgItem(IDC_EDIT1); //Hiển thị Unicode thật đơn giản pWnd->SetWindowText(_T("Hix1EC3n thx1ECBUnix63ox64x65 thx1EADt x111x1A1n gix1EA3n")); pWnd = GetDlgItem(IDC_BUTTON1); //Mời thử pWnd->SetWindowText(_T("Mx1EDDi thx1EED")); //Đây là chương trình minh hoạ Unicode this->SetWindowText(_T("x110ây là x63hx1B0x1A1ngtrình minh hox1EA1 Unix63ox64x65")); // Thử dùng Unicode, Tiêu đề Unicode MessageBox(_T("Thx1EED x64ùngUnix63ox64x65"),_T("Tiêu x111x1EC1 Unix63ox64x65"));}Đọc file text Unicode
  6. 6. void CTestUnicodeDlg::OnButton2(){ // TODO: Add your control notification handler code here CTextFileRead file(_T("Test.txt")); CTextFileWritefileWrite(_T("Output.txt"),CTextFileWrite::UNI16_LE); CString allText; file.Read(allText); //Doc fileWrite.Write(allText); //Ghi CWnd *pWnd; pWnd = GetDlgItem(IDC_EDIT1); pWnd->SetWindowText(allText); //Hien thi len control file.Close(); fileWrite.Close();}TÀI LIỆU THAM KHẢONguyễn Văn Hiệp, Mã Unicode tiếng Việt - Hiện thực trong Windows và Linux, PCWorld Việt Nam, 12/2001, trang 68 – 76PEK, CTextFileDocument, Code Project (www.codeproject.com), URL =http://www.codeproject.com/file/textfiledocument.asp (Update: 24/05/2005)

×