30/09/2018, 23:08

Cách nhập và xuất tiếng Việt có dấu trong C++

Như tiêu đề là mình đang tìm cách nhập và xuất tiếng Việt có dấu trong C++. Mong mọi người giúp và cho ví dụ đơn giản

Nguyễn Tuấn Nam viết 01:19 ngày 01/10/2018

ca này khó cho em hóng với

Sang Võ viết 01:22 ngày 01/10/2018

console có được thì chắc khó

明玉 viết 01:25 ngày 01/10/2018

Bạn muốn nhập xuất qua màn hình hay qua file? Nếu qua file thì dùng thư viện Qt cho lẹ.

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

int main()
{
    _setmode(_fileno(stdin), _O_U16TEXT);
    _setmode(_fileno(stdout), _O_U16TEXT);
    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;
}
Nguyễn Đức Anh viết 01:14 ngày 01/10/2018

Bạn ơi, code trên chạy được rồi, nhưng khi xuất ra thì ký tự unicode sẽ thành dấu ‘?’ cả, thế nên mình phải chỉnh lại font Consolas. Có cách nào để dùng code thay đổi font đó khộng, khi chạy chương trình nó tự chỉnh font giúp mình luôn á. Với cả mình dùng Unikey để nhập tiếng Việt trong console không được.

The Wind viết 01:12 ngày 01/10/2018

Console trong Window thì hơi khó vì nó ếu hỗ trợ UTF -8 !

明玉 viết 01:15 ngày 01/10/2018

Mình dùng “Gõ Tiếng Việt” viết Tiếng Việt bình thường mà ta

Bạn thử cái này xem (Lưu ý là bạn phải dùng wcin và wcout luôn chứ không dùng bình thường được nữa, và cái này dĩ nhiên là Windows-Only và máy phải có Consolas):

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

int main()
{
    _setmode(_fileno(stdin), _O_U16TEXT);
    _setmode(_fileno(stdout), _O_U16TEXT);
    SetConsoleTitleW(L"Việt Nam Vô Địch!");
    HANDLE hdlConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_FONT_INFOEX consoleFont;
    consoleFont.cbSize = sizeof(consoleFont);
    GetCurrentConsoleFontEx(hdlConsole, FALSE, &consoleFont);
    memcpy(consoleFont.FaceName, L"Consolas", sizeof(consoleFont.FaceName));
    SetCurrentConsoleFontEx(hdlConsole, FALSE, &consoleFont);
    std::wcout << L"Tiếng Việt có dấu" << std::endl;
    std::wstring test;
    std::wcout << L"Hãy nhập vào một chuỗi ký tự:" << std::endl;
    std::getline(std::wcin, test);
    std::wcout << L"Chuỗi ký tự mà bạn vừa mới nhập:" << std::endl;
    std::wcout << test << std::endl;
    return 0;
}
Nguyễn Đức Anh viết 01:15 ngày 01/10/2018

Mình không biết sao code này lại không chỉnh font cho máy mình được :D. Nhưng thôi, quan trọng là mình biết cách nhập xuất tiếng Việt. Cảm ơn bạn nhiều nhiều nha

Vuio viết 01:18 ngày 01/10/2018

Console có hỗ trợ UTF8 nhé bạn.
Nếu mình nhớ không lầm thì là setconsoleoutputcp(65001) thì phải.

Khoi Tran viết 01:09 ngày 01/10/2018

Bạn ơi đọc ghi file với unicode bằng cách nào v ?? bạn có nói dùng thư viện Qt mình không hiểu lắm, bạn chỉ rõ mình với
mình dùng c++ nha

明玉 viết 01:11 ngày 01/10/2018
lmgtfy.com

LMGTFY

LMGTFY

Phùng Chịnh viết 01:10 ngày 01/10/2018

mình bị lỗi này là sao@@

明玉 viết 01:18 ngày 01/10/2018

Đưa code ngắn lên xem nào.

Phùng Chịnh viết 01:20 ngày 01/10/2018
#include "stdafx.h"
#include<iostream>
#include<string>
#include<io.h>
#include<fcntl.h>
#include<Windows.h>

using namespace std;
class Students {
	int code;
	wstring fullname;
	wstring phonenumber;
	wstring birthday;
public:
	void getData();
	void setData();
};
void Students::setData() {
	wcout << L"Nhập mã sinh viên: ";
	cin >> code;
	wcout << L"Nhập tên sinh viên: ";
	getline(wcin >> ws, fullname);
	wcout << L"Nhập số điện thoại: ";
	getline(wcin>>ws, phonenumber);
	wcout << L"Nhập ngày sinh: ";
	getline(wcin >> ws, birthday);
}
void Students::getData() {
	wcout << L"Mã sinh viên: "<< code << endl;
	wcout << L"Họ tên: " << fullname << endl;
	wcout << L"Số điện thoại: " << phonenumber << endl;
	wcout << L"Ngày sinh: " << birthday << endl;
}

int main()
{	
	_setmode(_fileno(stdin), _O_U16TEXT);
	_setmode(_fileno(stdout), _O_U16TEXT);
	HANDLE hdlconsole = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_FONT_INFOEX consoleFont;
	consoleFont.cbSize = sizeof(consoleFont);
	GetCurrentConsoleFontEx(hdlconsole, FALSE, &consoleFont);
	memcpy(consoleFont.FaceName, L"Consolas", sizeof(consoleFont.FaceName));
	Students *sv = new Students;
	int n;
	wcout << L"Nhập số lượng sinh viên: "; cin >> n;
	for (int i = 0; i < n; i++) {
		wcout << L"Nhập thông tin sinh viên thứ " << i + 1 <<": "<< endl;
		sv->setData();
	}
	wcout << L"--------Danh sách sinh viên---------" << endl;
	for (int i = 0; i < n; i++) {
		sv->getData();
	}
	return 0;
}

明玉 viết 01:23 ngày 01/10/2018

Bạn đã chạy 2 lệnh này:

_setmode(_fileno(stdin), _O_U16TEXT);
_setmode(_fileno(stdout), _O_U16TEXT);

Thì cả chương trình, bắt buộc phải dùng wcoutwcin nhé

Phùng Chịnh viết 01:19 ngày 01/10/2018

cảm ơn bạn mình sửa đc rồi. cho mình hỏi khi mình nhập gõ kiểu Telex nó ko đc @@

明玉 viết 01:10 ngày 01/10/2018

CMD Windows chỉ có GoTiengViet mới gõ được Tiếng Việt

Khoi Tran viết 01:24 ngày 01/10/2018

wao, thank nhiều nhé, có gì không biết xin chỉ giáo thêm
lần đầu biết thêm cái lmgtfy này, hay quá
nó bị lỗi gì v bạn, mình mới #include thôi à

明玉 viết 01:20 ngày 01/10/2018

Qt cài vào Visual Studio khó lắm đấy, bạn lên mạng kiếm tut tích hợp vào VS 2015, hoặc xài luôn Qt Creator cho mau.

Khoi Tran viết 01:13 ngày 01/10/2018

à, ý là phải xài tool vào hả, vậy không được rồi, tại thầy mình bắt phải thao tác nhập xuất xử lý file với dữ liệu unicode, mà làm sao bắt ông thầy cài tool được
Bạn có cách nào khác không

明玉 viết 01:15 ngày 01/10/2018

Trên diễn đàn có một bài: https://daynhauhoc.com/t/cach-d-c-va-ghi-file-unicode-c

Bài liên quan
0