Mình mới học đọc và ghi tệp , nhưng gặp phải một trường hợp đọc và xử lý chuỗi Unicode nhưng mình không biết rõ cách đọc và cách ghi ra một file mới cũng phải là file có chuỗi Unicode như thế nào ?
Cách đọc và ghi file Unicode C++
nếu là utf-8 thì đọc ghi bình thường bằng fstream, cout, cin và string. Còn utf-16 thì wfstream wcout wcin và wstring. Có thể đọc từ file utf-8 vào chuỗi wstring rồi lưu xuống utf8 lại cũng được:
C++: https://github.com/tntxtnt/VietnameseIO/blob/master/VietnameseIO/umain.cpp
C: https://github.com/tntxtnt/VietnameseIO/blob/master/VietnameseIO/main.c
thử xem mấy cái code đó có chạy được ko
Khi đọc file có tiếng Việt bằng C++, mình chỉ chèn 2 _setmode ở đầu để đọc ghi lại vào file khác, dù đọc ghi vẫn ổn nhưng mà khi in ra console thì đã bị lỗi font, sau đó mình chỉ thêm dòng locale loc(locale(), new codecvt_utf8<wchar_t>);
thì đã giải quyết được lỗi font khi in ra console. Code cho các bạn tham khảo:
#include <iostream>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <string>
#include <fstream>
#include <locale>
#include <Windows.h>
#include <codecvt>
using namespace std;
int main()
{
_setmode(_fileno(stdin), _O_U16TEXT);
_setmode(_fileno(stdout), _O_U16TEXT);
locale loc(locale(), new codecvt_utf8<wchar_t>);
wifstream fi;
wofstream fo;
fi.open(L"loi.txt");
fi.imbue(loc);
fo.open("huan.txt");
wstring s;
while (!fi.eof())
{
getline(fi, s, L'\n');
wcout << s << endl;
}
fi.close();
fo.close();
return 0;
}
mình có imbue loc vào fin/fout mà :V Dòng 53 với dòng 63
Mình cũng đang làm project cần đến xử lí unicode file. Solution của bạn rất tuyệt, cảm ơn bạn nhé.