Khi bạn viết
cout << "\u2780";
Các trình biên dịch chuyển \ u2780 thành mã hóa thích hợp của ký tự đó trong bộ ký tự thực thi. Đó có thể là UTF-8, và vì vậy chuỗi kết thúc có bốn byte (ba cho ký tự, một cho null terminator).
Nếu bạn muốn tạo ký tự lúc chạy thì bạn cần một số cách để thực hiện khi chạy cùng một chuyển đổi sang UTF-8 mà trình biên dịch đang làm lúc biên dịch.
C++ 11 cung cấp một tiện dụng wstring_convert
mẫu và codecvt khía cạnh có thể làm được điều này, tuy nhiên libstdC++, thư viện thực hiện tiêu chuẩn mà đi kèm với gcc, vẫn chưa nhận được xung quanh để thực hiện chúng (như của gcc 4.8) . Phần sau đây cho thấy cách sử dụng các tính năng này, nhưng bạn sẽ cần phải sử dụng một triển khai thư viện chuẩn khác hoặc chờ libstdC++ để triển khai chúng.
#include <codecvt>
int main() {
char32_t base = U'\u2780';
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> convert;
std::cout << convert.to_bytes(base + 5) << '\n';
}
Bạn cũng có thể sử dụng bất kỳ phương pháp nào khác để sản xuất UTF-8 mà bạn có sẵn.Ví dụ, biểu tượng, ICU và việc sử dụng thủ công các phần tử codecvt_byname trước C++ 11 sẽ hoạt động. (Tôi không hiển thị ví dụ về các vì mã mà sẽ được nhiều hơn nhiều so với một mã đơn giản cho phép wstring_convert
.)
Một thay thế đó sẽ làm việc cho một số ít các nhân vật sẽ tạo ra một loạt các chuỗi sử dụng chữ.
char const *special_character[] = { "\u2780", "\u2781", "\u2782",
"\u2783", "\u2784", "\u2785", "\u2786", "\u2787", "\u2788", "\u2789" };
std::cout << special_character[i] << '\n';
đang sử dụng wchar_t với nhà điều hành 'L'? đăng mã đầy đủ của bạn nếu có thể hoặc [sscce.org] (SSCCE) – pinkpanther
Nếu bạn không muốn gây rối với mã hóa Unicode, bạn có thể sử dụng bảng để ánh xạ các chuỗi thành các giá trị có thể có của 'x' thay vì thêm nó. – dyp
Bản sao có thể có của [Cách in ký tự Unicode trong C++?] (Http://stackoverflow.com/questions/12015571/how-to-print-unicode-character-in-c) –