#include "../../jlib/win32/UnicodeTool.h" #include <stdio.h> #include <assert.h> using namespace jlib::win32; int main() { // gb2312 ansi // 不管cpp文件是什么编码,s1都是 CE D2 CA C7 D6 D0 B9 FA C8 CB char s1[] = "我是中国人"; printf("s1 char:\n"); printf("%s\n", s1); // 可以打印 printf("raw %dbytes ", sizeof(s1) - 1); for (int i = 0; i < sizeof(s1) - 1; i++) { printf("%02X ", (unsigned char)s1[i]); } printf("\n\n"); // 6211 662F 4E2D 56FD 4EBA wchar_t s2[] = L"我是中国人"; printf("s2 wchar_t:\n"); printf("%ls\n", s2); // 不可以打印 printf("raw %dbytes ", sizeof(s1) - 1); for (int i = 0; i < sizeof(s2) / sizeof(wchar_t) - 1; i++) { printf("%04X ", (unsigned short)s2[i]); } printf("\n\n"); // 6211 662F 4E2D 56FD 4EBA auto s1u16 = mbcs_to_utf16(s1); printf("s1u16 from mbcs_to_utf16 on s1:\n"); printf("%ls\n", s1u16.data()); // 不可以打印 printf("raw %zubytes ", s1u16.size() * sizeof(wchar_t)); for (size_t i = 0; i < s1u16.size(); i++) { printf("%04X ", (unsigned short)s1u16[i]); } printf("\n\n"); // E6 88 91 E6 98 AF E4 B8 AD E5 9B BD E4 BA BA auto s1u8 = mbcs_to_utf8(s1); printf("s1u8 from mbcs_to_utf8 on s1:\n"); printf("%s\n", s1u8.data()); // 不可以打印 printf("raw %zubytes ", s1u8.size() * sizeof(char)); for (size_t i = 0; i < s1u8.size(); i++) { printf("%02X ", (unsigned char)s1u8[i]); } printf("\n\n"); // CE D2 CA C7 D6 D0 B9 FA C8 CB auto s2mbcs = utf16_to_mbcs(s2); printf("s2mbcs from utf16_to_mbcs on s2:\n"); printf("%s\n", s2mbcs.data()); // 可以打印 printf("raw %zubytes ", s2mbcs.size() * sizeof(char)); for (size_t i = 0; i < s2mbcs.size(); i++) { printf("%02X ", (unsigned char)s2mbcs[i]); } printf("\n\n"); // E6 88 91 E6 98 AF E4 B8 AD E5 9B BD E4 BA BA auto s2u8 = utf16_to_utf8(s2); printf("s2u8 from utf16_to_utf8 on s2:\n"); printf("%s\n", s2u8.data()); // 不可以打印 printf("raw %zubytes ", s2u8.size() * sizeof(char)); for (size_t i = 0; i < s2u8.size(); i++) { printf("%02X ", (unsigned char)s2u8[i]); } printf("\n\n"); assert(s1u16 == s2); assert(s1u8 == s2u8); assert(s2mbcs == s1); }