Tôi hiện đang viết một ứng dụng yêu cầu tôi gọi GetWindowText trên các cửa sổ tùy ý và lưu trữ dữ liệu đó vào một tệp để xử lý sau. câu chuyện dài ngắn, tôi nhận thấy rằng công cụ của tôi đã thất bại về Battlefield 3, và tôi thu hẹp vấn đề xuống với nhân vật sau đây trong tiêu đề cửa sổ của nó: http://www.fileformat.info/info/unicode/char/2122/index.htmWindows Unicode C++ Lỗi đầu ra của luồng
Vì vậy, tôi đã tạo ra một ứng dụng thử nghiệm nhỏ mà chỉ làm những điều sau đây:
std::wcout << L"\u2122";
Low and behold ngắt kết xuất ra cửa sổ bảng điều khiển cho phần còn lại của chương trình.
Tại sao MSVC STL nghẹt thở trên ký tự này (và tôi giả định người khác) khi các API như MessageBoxW vv hiển thị nó tốt?
Làm cách nào để có được các ký tự đó được in vào tệp của tôi?
Đã thử nghiệm trên cả VC10 và VC11 trong Windows 7 x64.
Xin lỗi vì bài đăng được xây dựng kém chất lượng, tôi đang xé tóc ra ở đây.
Cảm ơn.
EDIT:
trường hợp thử nghiệm tối thiểu
#include <fstream>
#include <iostream>
int main()
{
{
std::wofstream test_file("test.txt");
test_file << L"\u2122";
}
std::wcout << L"\u2122";
}
Kết quả mong đợi: '™' nhân vật in để an ủi và tập tin. Kết quả quan sát: Tệp được tạo nhưng trống. Không có đầu ra cho bàn điều khiển.
Tôi đã xác nhận rằng phông chữ I "m sử dụng cho giao diện điều khiển của tôi là khả năng hiển thị các nhân vật trong câu hỏi, và các tập tin chắc chắn là rỗng (0 byte trong kích thước)
EDIT:.
Tiếp tục gỡ rối cho thấy 'failbit' và 'badbit' được thiết lập trong dòng (s)
EDIT:.
tôi cũng đã cố gắng sử dụng Boost.Locale và tôi đang gặp vấn đề tương tự ngay cả với ngôn ngữ mới thấm nhuần trên toàn cầu và rõ ràng luồng ard.
Vâng tôi sẽ bị nguyền rủa, imbuing rằng địa phương UTF8 thực sự làm việc ... Bây giờ tại sao địa ngục không phải là Boost.Locale làm điều đó cho tôi?Tôi giải thích các tài liệu nói rằng UTF-8 được giả định là mã hóa hẹp mặc định, và tôi đã thấm nhuần ngôn ngữ trên toàn cầu và tất cả các luồng tĩnh, vì vậy cái quái gì ... – RaptorFactor