Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: TvLib thư viện nhập xuất tiếng Việt cho Windows Console

  1. #1
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    Mặc định TvLib thư viện nhập xuất tiếng Việt cho Windows Console

    + TvLib là thư viện hỗ trợ việc hiện thị, nhập xuất cho chương trình Windows Console (Windows 7, Windows 10), theo tiêu chí What you see is what you get (WYSIWYG).

    File đính kèm, _TvLib.rar, có:
    - các mã nguồn cũng được biên dịch sẵn cho việc chạy thử
    - TvLib không cung cấp mã nguồn tạo thư viện cho người dùng cuối.
    - các code demo, thư viện hỗ trợ. Code có cách biên dịch nó trong trường hợp cần biên lại để kiểm lại, hoặc thay đổi theo ý riêng thường đặt ở đầu file.

    Ví dụ các lệnh biên dịch cho TBC Msc, Gcc và Bcc bẳng cmd ở các dòng:
    - dòng 6 cho Bcc
    - dòng 8 cho Gcc
    - dòng 10 cho Gcc liên kết tỉnh -static
    - dòng 12 cho Msc

    C++ Code:
    1. /*
    2. Msc:
    3. + UTF-8, non-BOM, for narrow string, warings
    4. + UTF-8 BOM, for wide string.
    5.  
    6. bcc32c -q FmtBcc.cpp TvLibBcc.lib
    7.  
    8. g++ -o FmtGcc FmtGcc.cpp TvLibBcc.dll
    9.  
    10. g++ -o FmtGcc FmtGcc.cpp TvLibGcc.a -static
    11.  
    12. cl /nologo /EHsc FmtMsc.cpp TvLibMsc.lib user32.lib
    13. */
    14.  
    15. #include <windows.h>
    16. #include "..\TvLib.h"
    17.  
    18. using namespace std;
    19.  
    20. int main(){
    21.     setFont();
    22.     //...
    23. }

    Với Gcc, nó được tách ra thành 2 thư mục: một biên dịch thường cho máy tính đã cài MinGW, một biên dịch static cho máy khác (kích thước sẽ tăng đáng kể)

    Mong được cộng tác và góp ý của các bạn.

    Xem thêm:
    http://diendan.congdongcviet.com/threads/t448065::exec-lib-dll-and-exe.cpp

    Link Google
    Thư Viện TvLib

    ...
    ..
    .
    Attached Files Attached Files

  2. #2
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    Ví dụ 1, setCfg, lựa chọn cấu hình cho hiện thị tiếng Việt
    C++ Code:
    1. /*
    2. For Msc:
    3. + UTF-8, non-BOM, for narrow string
    4. + UTF-8 BOM, for wide string.
    5.  
    6.     for Bcc
    7. bcc32c -q setCfg.cpp TvLibBcc.lib -osetCfgBcc
    8.  
    9.     for Gcc
    10. g++ setCfg.cpp TvLibGcc.a -o setCfgGcc.exe
    11. g++ setCfg.cpp TvLibGcc.a -o setCfgGccS.exe -static
    12.  
    13.     for Msc
    14. cl /nologo /EHsc setCfg.cpp TvLibMsc.lib /FesetCfgMsc
    15. */
    16.  
    17. #include "..\TvLib.h"
    18.  
    19. int main(){
    20. //# setFont for conApp?
    21.     int opt = 0;
    22.     printf("\n 1:    Run with Consola font");
    23.     printf("\n else: Run with current font");
    24.     printf("\n Choise: "); scanf("%d", &opt);
    25.     if(opt == 1) setFont();
    26.     system("cls");
    27.    
    28.     printf("\n Run Console Windows ...\n\n");
    29. //$ hàm printf Gcc và Bcc xuất sai tiếng Việt  
    30.     printf("\n==========================\n");  
    31.     printf("A quick brown fox jumps over the lazy dog\n");
    32.     //printf("Quốc ngữ tiếng Việt: bà cháu đi đường cần cẩn thận"); //# for Msc_only if ...
    33.     OutputW(L"Quốc ngữ tiếng Việt: bà cháu đi đường cần cẩn thận");
    34.     printf("\n==========================\n");
    35. //# dừng xem kết quả khi dblClick trong WE
    36.     printf("\n3. Press <Enter> to exit");
    37.     system("pause>nul");
    38. }
    Tuỳ thuộc chọn, ví dụ
    + chọn 1, nó sẽ có kết quả như sau:
    Code:
     Run Console Windows ...
    
    ==========================
    A quick brown fox jumps over the lazy dog
    Quốc ngữ tiếng Việt: bà cháu đi đường cần cẩn thận
    ==========================
    
    3. Press <Enter> to exit
    + ngược lại và font hiện hành không support, nó có kết quả, chuỗi bị biến dạng:
    Code:
     Run Console Windows ...
    
    ==========================
    A quick brown fox jumps over the lazy dog
    Qu?c ng? ti?ng Vi?t: bà cháu di du?ng c?n c?n th?n
    ==========================
    
    3. Press <Enter> to exit
    PS: Thư viện bên trên, #1, hàm OutputW không hiện thị được chuỗi có ký hiệu unicode cho Bcc và Gcc (đã sửa) khi cấu hình font không phù hợp
    ...
    ..
    .

  3. #3
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    TvLib còn có thể nhập xuất, hiện thị cho ngôn ngữ - chữ viết tượng hình CJK

    Chữ quốc ngữ và chữ tượng hình tranh chấp nhau, một mất một còn, không chung sống hoà bình được. Cụ thể:
    C++ Code:
    1. int main(){
    2. //# setFont for conApp?
    3.     //...
    4.     printf("\n Run Console Windows ...\n");
    5. //# hàm printf Gcc và Bcc xuất sai tiếng Việt  
    6.     printf("\n==========================\n");  
    7.     printf("EN. A quick brown fox jumps over the lazy dog\n");
    8.     OutputW(L"VN. Quốc ngữ tiếng Việt: bà cháu đi đường cần cẩn thận\n");
    9.     OutputW(L"CJK. 支持控制台输入、输出和显示越南语的库。");
    10.     printf("\n==========================\n");
    11. //# dừng xem kết quả khi dblClick trong WE
    12.     printf("\n3. Press <Enter> to exit");
    13.     cin.get(); //system("pause>nul");
    14. }
    Đã kiểm thử trong Win7, Win10:

    ...
    ..
    .

  4. #4
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    Ví dụ 2, ioTV, nhập xuất trực tiếp từ bàn phím
    C++ Code:
    1. /*
    2. Msc:
    3. + UTF-8, non-BOM, for narrow string
    4. + UTF-8 BOM, for wide string.
    5.  
    6.     Bcc
    7. bcc32c -q ioTV.cpp TvLibBcc.lib -o ioTVBcc
    8.  
    9.     Gcc
    10. g++ ioTV.cpp TvLibGcc.a -o ioTVGcc.exe
    11.  
    12.     Msc
    13. cl /nologo /EHsc ioTV.cpp TvLibMsc.lib /Fe"ioTVMsc"
    14. */
    15.  
    16. #include "..\TvLib.h"
    17.  
    18. int main(){
    19.     setFont();
    20.     system("cls");
    21. //
    22.     wstring str = InputTV(L"\n 1. One - Nhập chuỗi tiếng Việt: ");
    23.     OutMsg(L"\n+Chuỗi vừa nhập vào: %ls", str); //# ls largeString
    24. //
    25.     wstring nameS = InputTV(L"\n 2. Two - Bạn cảm thấy thế nào: ");
    26.     OutMsg(L"À ra vậy: %ls", nameS); //#
    27.     //OutputW(L"À ra vậy: "); OutputW(nameS);
    28.    
    29.     wstring nameW = InputTV(L"\n 3. Three - Bạn tên gì: ");
    30.     //# cắt bỏ L"\r\n";
    31.     nameW.pop_back(); nameW.pop_back();
    32.    
    33.     OutMsg(L"+OutMsg - Hân hạnh: %ls, hẹn gặp lại.", nameW);
    34.    
    35. //# for_debug dbl in WE
    36.     printf("\n\n Done, Bye .."); //system("pause>nul");
    37.     fflush(stdin); //# có nhập data ở trên
    38.     cin.get();
    39.     return 0;
    40. }

    Kết quả biên dịch với Msc, và chạy trên Win7


    Lưu ý: TvLib đã có một số thay đổi so với #1 của topic này
    Tôi sẽ cập nhật, đưa lên sau.
    ...
    ..
    .

  5. #5
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    hàm chuyển w2s, s2w (wide to string, string to wide)

    C++ Code:
    1. /*
    2.     Bcc
    3. bcc32c -q testFmt.cpp ..\TvLibBcc.lib -o FmtBcc
    4.  
    5.     Gcc
    6. g++ testFmt.cpp ..\TvLibGcc.a -o FmtGcc
    7.  
    8.     Msc
    9. cl /nologo /EHsc testFmt.cpp ..\TvLibMsc.lib /Fe"FmtMsc"
    10. */
    11.  
    12. #include "..\TvLib.h"
    13.  
    14. int main(){
    15.     setFont(); //setView(L"Consolas", 20);
    16.     system("cls");
    17. //#
    18.     wstring str = InputTV(L"\n 1. One - Nhập chuỗi tiếng Việt: ");
    19.     OutMsg(L"+Chuỗi vừa nhập vào: %ls", str); //# ls largeString
    20. //#
    21.     char*  chs = w2s(str);
    22.     PWCHAR ucs = s2w(chs);  
    23.     //HWND hwnd = GetConsoleWindow();
    24.    
    25.     //$ printf
    26.     OutputW(L"\n+Kết quả 1, ucs to utf: "); printf("%s", chs);
    27.     //MessageBoxA(hwnd, chs, "1.Result: ucs to utf", MB_OK);
    28.    
    29.     //$ wprintf
    30.     WCHAR kqB[] = L"\n+Kết quả 2, utf to ucs: %ls";
    31.     OutFmtW(kqB, ucs); 
    32.     //MessageBoxW(hwnd, ucs, L"2.Và đảo lại, utf to ucs", MB_OK);
    33. //#
    34.     wstring nameS = InputTV(L"\n\n 2. Two - Bạn cảm thấy thế nào: ");
    35.     OutMsg(L"À ra vậy: %ls", nameS); //#
    36.     //OutputW(L"À ra vậy: "); OutputW(nameS);
    37.    
    38.     wstring nameW = InputTV(L"\n\n 3. Three - Bạn tên gì: ");
    39.     OutMsg(L"+ OutMsg - Hân hạnh: %ls, hẹn gặp lại.", nameW);
    40.    
    41.     //# warings_Bcc_Gcc
    42.     WCHAR msg[] = L"\n+ OutFmtW - Hân hạnh: %ls, hẹn gặp lại lúc %i giờ chiều %ls.";
    43.     OutFmtW(msg, nameW.c_str(), 5, L"ngày mai"); //# OK
    44.  
    45. //# for_debug dbl in WE
    46.     Pause("\n\n+ Done, Bye ..");
    47.     return 0;
    48. }

    - Bcc, Gcc hàm OutFmtW hỗ trợ trợ định dạng số thực ví dụ %10.2f
    - Msc RuntimeError R6002 - floating point support not loaded, nên cần viết khác, tách chuỗi cần xuất ra biến buff, rồi gọi OutputW(buff);

  6. #6
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    Mặc định TvLib thư viện nhập xuất tiếng Việt cho Windows Console

    Tóm lại:
    + TvLib là thư viện hỗ trợ việc nhập xuất, hiện thị tiếng Việt cho chương trình Windows Console (Windows 7, Windows 10) Cpp, theo tiêu chí What you see is what you get (WYSIWYG).

    + Windows Console (winCon) có hạn chế trong việc hiện thị Unicode,
    - các hàm đọc (gets/read) nhận không đúng dữ liệu wide string,
    - các hàm viết (puts/write) xuất sai, bao gồm dữ liệu là hằng chuỗi (string literal)
    dẫn đến ứng dụng (console applications, conApp) không đáp ứng được cho người dùng sử dụng Unicode.

    + Ngôn ngữ tiếng Việt sử dụng chữ Quốc ngữ trong giao tiếp. Bộ chữ cái tiếng Việt thuộc Unicode vì có nhiều kí hiệu nằm ngoài bảng mã ASCII/ANSI.

    + Ngôn ngữ lập trình (NNLT) cơ sở thường bắt đầu bằng các bài học trên winCon, tạo conApp.
    + Những hạn chế trên dẫn đến khó khăn cho người sử dụng tiếng Việt (UTF hay Unicode nói chung) trong lập trình, trong công nghệ thông tin. Bỏ thói quen đã có, viết đầy đủ (có dấu) sang viết / gõ dạng "chu Viet khong dau" - chữ Việt không dấu khó viết, khó đọc, sai lệch nội dung diễn đạt. Hình thành thói quen xấu khi khởi đầu, ảnh hưởng tới những bước tiếp theo trong học tập, đến công việc sau này.
    + NNLT c/c++ được sử dụng phổ biến ở Việt Nam, được giới thiệu ở cấp phổ thông và dạy ở bậc đại học. Trình biên dịch (TBD) thường dùng cho c/c++ là Msc, Gcc và Bcc.

    + TvLib hỗ trợ - mã nguồn c++ sau khi biên dịch (với Msc, Gcc và Bcc) thành conApp - có thể hiện thị được, nhập xuất được tiếng Việt, ngôn ngữ phổ thông thân thiện với hầu hết người Việt Nam.
    + TvLib bổ xung hàm thiết lập hiện thị, nhập xuất và chuyển đổi giữa wide và narrow string, cụ thể là wstring và string STL (Standard Template Library).
    + TvLib có một số code demo diễn tả hoạt động của nó.

    + Mã nguồn TvLib được viết chung cho Msc, Gcc và Bcc - không có macro phân biệt, chỉ khác lệnh biên dịch để sinh thư viện (LIB và DLL) dùng cho mỗi TBD. Khi tách ra có thể sẽ ngắn gọn hơn cho mỗi TBD, ví dụ hàm printf (narrow functions) của Msc xuất được ký hiệu unicode có trong chuỗi thay vì dùng API.
    + TvLib không cung cấp mã nguồn cho người dùng cuối.

    + TBD Msc, Gcc và Bcc xử lý, ứng xử khác nhau với source code chứa hằng chuỗi wstring. Gcc và Bcc hỗ trợ Utf-8 (hasBOM/nonBOM) nhưng Msc lại phân biệt. Msc hỗ trợ Utf-16 nhưng Gcc và Bcc thì không.
    + Ví dụ hằng chuỗi chứa ký hiệu unicode:
    - Với Msc là hợp lệ (dạng UTF-8) có thể gán cho biến string (narrow), (Utf-8 BOM dùng cho mã nguồn chứa ký hiệu unicode dùng với hàm wide functions, ví dụ wprintf)

    + Những bộ gõ tiếng Việt có thể dùng cho winCom hiện nay khá phổ biến, ví dụ GoTiengViet, EVKey và UniKey.
    + Nhằm tránh drive cảnh báo vi rút, TvLib sẽ bỏ đi các file exe chạy thử, cần thì bạn biên dịch lại như hướng dẫn.

    + lib file dùng cho việc liên kết biên dịch; dll file thì cần cho quá trình chạy của exe. Cách đơn giàn tạo thư mục, ví dụ e:\TvLibCpp và PATH chỉ tới thư mục đó (System Properties > Advanced > Environment Variables ... ).

    rồi copy dll file đến đó thay vì chép vào %windir% hay %windir%\System32 như một số tài liệu khác trên mạng

    + Mong được cộng tác và góp ý của các bạn.

    Link drive Google hiện tại, chính thức
    Thư Viện TvLib

    ...
    ..
    .

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn