Sở dĩ string
không thể lưu được ký tự Unicode bởi vì bản chất bên dưới, nó là mảng của các ký tự char
, chúng ta hoàn toàn có thể gán một mảng char
vào kiểu string
, mà kiểu dữ liệu char
thì không đủ số bytes để biểu diễn ký tự Unicode.
Thay vào đó bạn nên sử dụng wstring
(wide string), bản chất của wstring
bên dưới là mảng các ký tự wchar_t
, một dạng mở rộng của char
có thể đáp ứng được ký tự Unicode.
wstring = L"Tiếng Việt";
Mặc định trong Windows, console không hiển thị kiểu dữ liệu Unicode, để xuất wstring
ra màn hình Console, bạn cần khai báo thêm dòng lệnh
_setmode(_fileno(stdout), _O_U16TEXT);
Một điều nữa, cout
chỉ hoạt động với string
, để xuất ra wstring
bạn phải dùng wcout
.
Chương trình mẫu:
#include <io.h>
#include <fcntl.h>
#include <string>
#include <iostream>
using namespace std;
int main() {
_setmode(_fileno(stdout), _O_U16TEXT);
wstring Str = L"Tiếng Việt";
wcout << Str << endl;
}