Tôi đang viết trình thu thập dữ liệu web để tìm nạp một số tệp web Trung Quốc. Các tệp được tìm nạp được mã hóa bằng utf-8. Và tôi cần phải đọc những tệp đó để thực hiện một số phân tích cú pháp, chẳng hạn như trích xuất các URL và Ký tự Trung Quốc. Nhưng tôi thấy rằng khi tôi đọc các tập tin vào một std :: string biến và đầu ra nó vào giao diện điều khiển, các ký tự Trung Quốc đã trở thành ký tự rác. Tôi áp dụng tăng :: regex vào biến std :: string và có thể trích xuất tất cả các URL nhưng ký tự Trung Quốc.Cách đọc tệp được mã hóa UTF-8 có chứa các ký tự tiếng Trung và xuất chúng chính xác trên bảng điều khiển?
Tôi có thể giải quyết những vấn đề đó như thế nào?
P.S. Các tệp CPP của tôi được mã hóa như ANSI theo mặc định, hệ điều hành là Win8 bằng tiếng Trung Quốc;
Có vẻ như bạn cần thay đổi 'trang mã' từ UTF-8 thành bất kỳ trang mã nào mà bảng điều khiển của bạn sử dụng cho ký tự tiếng Trung. Gọi MultiByteToWideChar để thay đổi từ UTF-8 sang Unicode, theo sau là WideCharToMultiByte để thay đổi từ Unicode sang trang mã cục bộ của bạn. – john
Hầu hết có thể là lỗi của bàn điều khiển. Hãy thử '>' 'ing vào một tập tin. Nếu nó hóa ra là hợp lệ UTF-8 với các ký tự Trung Quốc, thì chương trình của bạn hoạt động tốt và đây là một câu hỏi của Windows. (Tất nhiên, bạn vẫn có thể cần phải thay đổi chương trình của bạn để làm việc xung quanh Windows, nhưng bạn sẽ biết ai là người có lỗi.) – aib
@aib Có, khi tôi chuyển hướng biến chuỗi std :: thành một tệp khác, nội dung vẫn hợp lệ UTF-8 với các ký tự Chiese. Trang mã của giao diện điều khiển của tôi là "936 (ANSI/OEM - 简体 中文 GBK)" '. –