Gặp lỗi font tiếng Việt trên console

Mọi người cho mình hỏi làm sao để fix lỗi này ạ? Gõ tiếng việt lên console một số ký tự thì vẫn hiển thị nhưng một số ký tự thì nó ra dấu “?”
Đây là code mình test:

#include <iostream>
#include <io.h>
#include <fcntl.h>

int main()
{
    _setmode(_fileno(stdin), _O_WTEXT);
    _setmode(_fileno(stdout), _O_WTEXT);
    std::wcout << L"Tiếng Việt có dấu" << std::endl;
    wchar_t test[256] = { 0 };
    std::wcout << L"Hãy nhập vào một chuỗi ký tự:" << std::endl;
    std::wcin >> test;
    std::wcout << L"Chuỗi ký tự mà bạn vừa mới nhập:" << std::endl;
    std::wcout << test;
    return 0;
}

Em chỉnh font trong cmd lại thành font consolas xem

3 Likes

Dạ em chỉnh rồi nhưng không được

E thử in ra giá trị của từng ký tự trong chuỗi có dấu xem nó in ra gì :V

std::wcout << (int)L'ứ'; nó in ra bao nhiêu :V

2 Likes

Nó ra 7913 a, e thử in “ò ọ ó õ ỗ” thì nó bị lỗi chỗ “ọ với ỗ”, còn “ò ó õ” thì vẫn in được

em thử enable /utf-8 thử :V
https://docs.microsoft.com/en-us/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=vs-2019

  1. Open the project Property Pages dialog box. For more information, see Set C++ compiler and build properties in Visual Studio.
  2. Select the Configuration Properties > C/C++ > Command Line property page.
  3. In Additional Options , add the /utf-8 option to specify your preferred encoding.
  4. Choose OK to save your changes.

cái font kia là font gì vậy :V Consolas mà italic à?

4 Likes

chắc là do font thôi em ơi :V E click phải vô thanh tiêu đề của cmd rồi chọn Properties:

image

sau đó bấm qua thẻ Font và chọn font Consolas là được :V

image

`L’ứ’ nó in ra 7913 là đúng giá trị của ‘ứ’, nghĩa là ko phải vấn đề của encoding/source charset gì đó. Trong màn hình cmd nó in ra đúng 1 ký tự tiếng Việt như ra ô ? nghĩa là font đó ko có “hình” của ký tự đó :V

5 Likes


em thử rồi mà không thấy thay đổi gì a à

em chạy lại chụp cái màn hình a xem :V

nếu em xài VS2019 và chịu khó tí =] thì em clone vcpkg rồi install Boost.Nowide thử =] Mà làm lâu lắm ráng mò cái này thêm xem sao :V

2 Likes

Dạ đây anh

Hồi trước e chạy cũng bth mà sau e cài lại win thì bị thế này

2 Likes

em thử input tiếng Việt xem. Gõ “nguyễn” rồi enter xem nó in ra gì, chữ nguyễn em viết nó có hiển thị ký tự “ễ” được ko :V

3 Likes

không được anh

em nhập từ bàn phím ấy chứ ko phải in ra bằng wcout :V

std::wcin >> test;

em input vào chữ “nguyễn” xem trên cmd có hiển thị được chữ “ễ” ko. Nếu ko gõ được chữ ễ thì do font trên cmd bị lỗi gì rồi :V

3 Likes

lúc nhập wcin là nó không hiển thị rồi a

lúc in ra cũng bị lỗi a

Em dùng font khác thì vẫn in được nên chắc là do như anh nói font consolas bị lỗi rồi a

1 Like

vậy à, dính phải font consolas bản dỏm, đúng bó tay thiệt =]

3 Likes

thế giờ phải làm sao anh

xài Courier đỡ chứ sao :V Kiếm font consolas ở đâu đó install lại xem

1 Like

Không phải do font đâu anh. :slightly_smiling_face:
Em cũng bị nè. Test v là biết do VS r. :kissing:

4 Likes

em xài thẳng wcout mà ko gọi _setmode gì kia thì bị lỗi này đúng rồi :V Mà hình như chưa set /utf-8 nữa hay sao ấy :V

phải có thêm mấy dòng này này :V

#include <io.h>
#include <fcntl.h>

int main()
{
    _setmode(_fileno(stdin), _O_WTEXT);
    _setmode(_fileno(stdout), _O_WTEXT);

nếu in ra chữ “ễ” ko phải ô vuông mà là 3 ký tự rác thì phải set /utf-8. Còn in ra ô vuông có dấu ? kia là font ko có hỗ trợ ký tự này.

5 Likes

Em mới biết cái _setmode() kia luôn, còn file thì e có save encoding utf-8 r.

Thêm như a kia thì là ngon r. :smiling_face_with_three_hearts:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?