Sử dụng Tiếng Việt Unicode với Visual C/C++
Số trang: 8
Loại file: pdf
Dung lượng: 243.96 KB
Lượt xem: 8
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Vấn đề lập trình tiếng Việt Unicode với Visual C/C++ đã được đề cập nhiều trên các số báo trước đây. Gần đây có một phương pháp sử dụng hằng xâu utf-8. Tuy nhiên, cách làm này có nhược điểm là không tách rời được mã chương trình với thiết kế giao diện (do các hằng xâu tiếng Việt được đặt trong mã chương trình), dẫn đến khó khăn khi phát triển và bảo trì ứng dụng vừa hoặc lớn Qua bài viết này, tôi muốn trình bày một cách tiếp cận khác có hệ thống hơn và tiện dụng...
Nội dung trích xuất từ tài liệu:
Sử dụng Tiếng Việt Unicode với Visual C/C++ Giải pháp toàn diện: Sử dụng Tiếng Việt Unicode với Visual C/C++ Vấn đề lập trình tiếng Việt Unicode với Visual C/C++ đã được đề cập nhiều trên các số báo trước đây. Gần đây có một phương pháp sử dụng hằng xâu utf-8. Tuy nhiên, cách làm này có nhược điểm là không tách rời được mã chương trình với thiết kế giao diện (do các hằng xâu tiếng Việt được đặt trong mã chương trình), dẫn đến khó khăn khi phát triển và bảo trì ứng dụng vừa hoặc lớn Qua bài viết này, tôi muốn trình bày một cách tiếp cận khác có hệ thống hơn và tiện dụng hơn; đồng thời, tôi cũng muốn đưa ra một số giải pháp để Việt hoá được nhiều thành phần của ứng dụng hơn. Trước tiên, ta nói về thực trạng hỗ trợ Unicode của các công cụ phát triển trực quan Visual C++ 6.0 và 7.1 (.NET 2003) (bản 7.0 - .NET 2002 - hiện không còn được dùng phổ biến; nhưng về cơ bản, nó tương tự như bản 7.1). Visual C++ 6.0 không cho phép nhập Unicode ở cả trình soạn thảo tài nguyên (resource editor – dùng để tạo các thành phần giao diện ứng dụng) lẫn trình soạn thảo mã nguồn. Visual C++ 7.1 cho phép nhập Unicode trong mã nguồn. Đối với việc soạn thảo tài nguyên, Unicode được hỗ trợ nếu bạn dùng .NET framework; còn nếu bạn dùng Win32API hoặc MFC thì không. Tuy nhiên, việc biên dịch mã Unicode lại khác, sẽ được đề cập ở phần sau. Mã lệnh Unicode Các xâu Unicode (hay xâu kí tự rộng) được lưu như là mảng wchar_t, về bản chất là kiểu int16 (2 byte). Để trình biên dịch biết một xâu/kí tự là Unicode, ta phải thêm tiếp đầu ngữ L. Ví dụ, L“Thế Giới Vi Tính” hoặc L“T”. Có thể dùng macro _T hoặc TEXT để đảm bảo các xâu có thể được dịch phù hợp với thiết định của project. Xâu là Unicode nếu macro UNICODE/_UNICODE được định nghĩa, là xâu bình thường nếu không. Với Visual Studio .NET, hai macro UNICODE và _UNICODE được tự động tạo ra khi ta đặt Character Set của Project là Unicode. Các kiểu như LPCSTR, CHAR... đều có kiểu 16 bit tương ứng như LPCWSTR, WCHAR. Các kiểu LPCTSTR, TCHAR được dịch là kiểu 8 bit nếu UNICODE và _UNICODE không được định nghĩa và 16 bit nếu ngược lại. Do đó, trong những trường hợp chung, nên dùng các kiểu có thành tố T. Các hàm nhận hoặc trả về xâu thường có hai phiên bản 8 bit và 16 bit với các tiếp vị ngữ A hoặc W kiểu như GetWindowTextA và GetWindowTextW. Tên không có tiếp vị ngữ (GetWindowText) được dịch là một trong hai hàm theo cách tương tự như trên. Để nhập xâu Unicode trong Visual Studio.NET, Giao diện ứng dụng được Việt hóa bạn phải ghi lại mã nguồn theo encoding là “Unicode” hoặc “Unicode (UTF-8 with signature)”, (đừng nhầm với “without signature”) bằng Save As (hoặc Advanced Save Options). Tốt nhất là nên dùng encoding thứ hai. Còn với Visual Studio 6.0, bạn buộc phải nhập mã Unicode của các kí tự. Trình UnikeyNT 3.6 cung cấp “bảng mã” “Unicode C String” để bạn thực hiện việc này dễ dàng hơn. Lưu ý là cách này không áp dụng được trong soạn thảo tài nguyên. Nếu bạn viết “\x1EA1”, bộ dịch tài nguyên xem như xâu có ba kí tự, một có mã 0x1E và hai kí tự kia là “A” và “1”. Nói cách khác, nó chỉ chấp nhận cách viết này cho kí tự ANSI. Một lưu ý nhỏ là toàn bộ các font mà ta sử dụng trong chương trình cũng như font hệ điều hành dùng cho các thành phần giao diện (font cho title bar, menu, tooltip...) đều phải có các kí tự tiếng Việt Unicode. Tốt nhất là những font quen thuộc như Arial, Tahoma... Một số font mặc định của Windows không đáp ứng được yêu cầu này như MS Sans Serif, Trebuchet MS... Có lẽ bạn nên thông báo cho người dùng chương trình của mình biết điều này. Thiết định Project hỗ trợ Unicode Trong Visual Studio .NET: Đơn giản bạn chỉ cần đặt Character Set thành Unicode trong Project Properties/Configuration Properties/General. Trong Visual Studio 6.0, bạn tạo thêm macro UNICODE và _UNICODE, xoá macro _MBCS (multibyte character set) (vào Project Settings, chọn gốc project từ cây bên trái, vào tab C/C++, chọn Category là Preprocessor, gõ thêm các macro, cách nhau bằng dấu phẩy, xoá macro cũ). Nếu sử dụng MFC, bạn còn phải thêm điểm vào cho ứng dụng (vào Project Settings, Link, Output, nhập vào ô Entry Point “wWinMainCRTStartup”. Để ý chữ w đầu tiên). Nhớ là bạn phải đặt hỗ trợ cho tất cả các chế độ dịch cần thiết (Debug, Release... trong “Configuration” hoặc “Settings for”). Việt hóa mã nguồn C/C++ Đối với Visual C/C++ 7.1, ta gõ tiếng Việt Unicode như bình thường (ví dụ: TEXT(“Thế Giới Vi Tính”)). Chú ý chọn font cho trình soạn thảo để hiển thị được tiếng Việt Unicode (Vào Tools/Options, trong mục Environment/Fonts and Colors, chuyển mục “Show settings for” thành “Text Editor” và chọn lại Font). Sau đó, ghi lại theo một trong hai cách sau: – Vào mục File/Advanced Save Options để đổi “Encoding” thành “Unicode – Codepage 1200” hoặc “Unicode (UTF-8 with signature) – Codepage 65001”. Sau đó ghi lại tập tin. Chú ý là cần có “with signature” để trình biên dịch biết rằng tập tin được lưu dưới dạng Utf-8; nếu không (“without signature”), trình biên dịch sẽ hiểu nhầm là tập tin ASCII. “Signature” ở đây là kí hiệu báo Utf-8 được ghi vào đầu tập tin. – Chọn File/Save As. ...
Nội dung trích xuất từ tài liệu:
Sử dụng Tiếng Việt Unicode với Visual C/C++ Giải pháp toàn diện: Sử dụng Tiếng Việt Unicode với Visual C/C++ Vấn đề lập trình tiếng Việt Unicode với Visual C/C++ đã được đề cập nhiều trên các số báo trước đây. Gần đây có một phương pháp sử dụng hằng xâu utf-8. Tuy nhiên, cách làm này có nhược điểm là không tách rời được mã chương trình với thiết kế giao diện (do các hằng xâu tiếng Việt được đặt trong mã chương trình), dẫn đến khó khăn khi phát triển và bảo trì ứng dụng vừa hoặc lớn Qua bài viết này, tôi muốn trình bày một cách tiếp cận khác có hệ thống hơn và tiện dụng hơn; đồng thời, tôi cũng muốn đưa ra một số giải pháp để Việt hoá được nhiều thành phần của ứng dụng hơn. Trước tiên, ta nói về thực trạng hỗ trợ Unicode của các công cụ phát triển trực quan Visual C++ 6.0 và 7.1 (.NET 2003) (bản 7.0 - .NET 2002 - hiện không còn được dùng phổ biến; nhưng về cơ bản, nó tương tự như bản 7.1). Visual C++ 6.0 không cho phép nhập Unicode ở cả trình soạn thảo tài nguyên (resource editor – dùng để tạo các thành phần giao diện ứng dụng) lẫn trình soạn thảo mã nguồn. Visual C++ 7.1 cho phép nhập Unicode trong mã nguồn. Đối với việc soạn thảo tài nguyên, Unicode được hỗ trợ nếu bạn dùng .NET framework; còn nếu bạn dùng Win32API hoặc MFC thì không. Tuy nhiên, việc biên dịch mã Unicode lại khác, sẽ được đề cập ở phần sau. Mã lệnh Unicode Các xâu Unicode (hay xâu kí tự rộng) được lưu như là mảng wchar_t, về bản chất là kiểu int16 (2 byte). Để trình biên dịch biết một xâu/kí tự là Unicode, ta phải thêm tiếp đầu ngữ L. Ví dụ, L“Thế Giới Vi Tính” hoặc L“T”. Có thể dùng macro _T hoặc TEXT để đảm bảo các xâu có thể được dịch phù hợp với thiết định của project. Xâu là Unicode nếu macro UNICODE/_UNICODE được định nghĩa, là xâu bình thường nếu không. Với Visual Studio .NET, hai macro UNICODE và _UNICODE được tự động tạo ra khi ta đặt Character Set của Project là Unicode. Các kiểu như LPCSTR, CHAR... đều có kiểu 16 bit tương ứng như LPCWSTR, WCHAR. Các kiểu LPCTSTR, TCHAR được dịch là kiểu 8 bit nếu UNICODE và _UNICODE không được định nghĩa và 16 bit nếu ngược lại. Do đó, trong những trường hợp chung, nên dùng các kiểu có thành tố T. Các hàm nhận hoặc trả về xâu thường có hai phiên bản 8 bit và 16 bit với các tiếp vị ngữ A hoặc W kiểu như GetWindowTextA và GetWindowTextW. Tên không có tiếp vị ngữ (GetWindowText) được dịch là một trong hai hàm theo cách tương tự như trên. Để nhập xâu Unicode trong Visual Studio.NET, Giao diện ứng dụng được Việt hóa bạn phải ghi lại mã nguồn theo encoding là “Unicode” hoặc “Unicode (UTF-8 with signature)”, (đừng nhầm với “without signature”) bằng Save As (hoặc Advanced Save Options). Tốt nhất là nên dùng encoding thứ hai. Còn với Visual Studio 6.0, bạn buộc phải nhập mã Unicode của các kí tự. Trình UnikeyNT 3.6 cung cấp “bảng mã” “Unicode C String” để bạn thực hiện việc này dễ dàng hơn. Lưu ý là cách này không áp dụng được trong soạn thảo tài nguyên. Nếu bạn viết “\x1EA1”, bộ dịch tài nguyên xem như xâu có ba kí tự, một có mã 0x1E và hai kí tự kia là “A” và “1”. Nói cách khác, nó chỉ chấp nhận cách viết này cho kí tự ANSI. Một lưu ý nhỏ là toàn bộ các font mà ta sử dụng trong chương trình cũng như font hệ điều hành dùng cho các thành phần giao diện (font cho title bar, menu, tooltip...) đều phải có các kí tự tiếng Việt Unicode. Tốt nhất là những font quen thuộc như Arial, Tahoma... Một số font mặc định của Windows không đáp ứng được yêu cầu này như MS Sans Serif, Trebuchet MS... Có lẽ bạn nên thông báo cho người dùng chương trình của mình biết điều này. Thiết định Project hỗ trợ Unicode Trong Visual Studio .NET: Đơn giản bạn chỉ cần đặt Character Set thành Unicode trong Project Properties/Configuration Properties/General. Trong Visual Studio 6.0, bạn tạo thêm macro UNICODE và _UNICODE, xoá macro _MBCS (multibyte character set) (vào Project Settings, chọn gốc project từ cây bên trái, vào tab C/C++, chọn Category là Preprocessor, gõ thêm các macro, cách nhau bằng dấu phẩy, xoá macro cũ). Nếu sử dụng MFC, bạn còn phải thêm điểm vào cho ứng dụng (vào Project Settings, Link, Output, nhập vào ô Entry Point “wWinMainCRTStartup”. Để ý chữ w đầu tiên). Nhớ là bạn phải đặt hỗ trợ cho tất cả các chế độ dịch cần thiết (Debug, Release... trong “Configuration” hoặc “Settings for”). Việt hóa mã nguồn C/C++ Đối với Visual C/C++ 7.1, ta gõ tiếng Việt Unicode như bình thường (ví dụ: TEXT(“Thế Giới Vi Tính”)). Chú ý chọn font cho trình soạn thảo để hiển thị được tiếng Việt Unicode (Vào Tools/Options, trong mục Environment/Fonts and Colors, chuyển mục “Show settings for” thành “Text Editor” và chọn lại Font). Sau đó, ghi lại theo một trong hai cách sau: – Vào mục File/Advanced Save Options để đổi “Encoding” thành “Unicode – Codepage 1200” hoặc “Unicode (UTF-8 with signature) – Codepage 65001”. Sau đó ghi lại tập tin. Chú ý là cần có “with signature” để trình biên dịch biết rằng tập tin được lưu dưới dạng Utf-8; nếu không (“without signature”), trình biên dịch sẽ hiểu nhầm là tập tin ASCII. “Signature” ở đây là kí hiệu báo Utf-8 được ghi vào đầu tập tin. – Chọn File/Save As. ...
Tìm kiếm theo từ khóa liên quan:
Kỹ thuật lập trình Phần cứng Công nghệ thông tin Tin học Quản trị mạngGợi ý tài liệu liên quan:
-
52 trang 429 1 0
-
24 trang 353 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 312 0 0 -
74 trang 294 0 0
-
96 trang 291 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 288 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 278 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 274 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 262 0 0