Một cách tiếp cận dễ dàng hơn (hơn sử dụng API Win32 nguyên MultiByteToWideChar) sẽ sử dụng ATL conversion helpers, như CA2CW. Bạn có thể chỉ định CP_UTF8 như trang mã (tham số thứ hai trong các nhà xây dựng), để chuyển đổi từ Unicode UTF-8 Unicode UTF-16:
CreateDirectoryW(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
Lưu ý rằng trong Unicode xây dựng (mà phải là những người mặc những ngày), CreateDirectory chỉ mở rộng đến CreateDirectoryW, vì vậy tôi sẽ chỉ thả kết thúc "W" và sử dụng (IMHO, dễ đọc hơn) CreateDirectory:
CreateDirectory(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
Nguồn
2012-01-14 18:18:42
Yikes. Tại sao bất cứ ai muốn điều đó? Tôi nghĩ rằng chúng tôi đang quá khứ Windows ME bây giờ (đó là phiên bản Windows cuối cùng bao giờ cần các API ANSI). Họ nên chết, đặc biệt là cho các ứng dụng mới được phát triển. – Joey
Từ đâu bạn nhận được chuỗi UTF-8? Việc chuyển đổi ứng dụng của bạn trở nên hoàn toàn dễ dàng hơn với các chuỗi UTF-16, vì các hàm Windows API phiên bản rộng được yêu cầu. Và như Joey nói, * luôn luôn * gọi các phiên bản rộng (với hậu tố 'W'), không phải là phiên bản ANSI. Những người đã lỗi thời trong nhiều thập kỷ. –
@Jey: Bởi vì rất nhiều thư viện C (++) (bao gồm thư viện chuẩn!) Thích làm việc với các chuỗi dựa trên 'char' hơn là chuỗi dựa trên' wchar_t'. Nếu Windows hỗ trợ đầy đủ UTF-8, thì bạn chỉ có thể sử dụng UTF-8 trong suốt chương trình của bạn thay vì phải chuyển đổi giữa UTF-8 và UTF-16 mọi lúc. – dan04