我在MSVS Windows 11上有一个可运行的代码。
关键是你需要告诉编译器:
你想描述/输入一个以u8"\uxxx ..."或u8""(复制/粘贴)或u8"\U0001F600"编码为UTF-8的字符。
为此,你需要在开发者命令行中输入:
chcp 65001 Enter
你会看到:Active code page: 65001。
或者你可以保留当前的代码页,
你在cmd中输入chcp,可能会看到:
Active code page: 1250
但你需要使用以下命令进行编译:
cl /W4 /EHsc /source-charset:utf-8 mbs_extended.cpp mbs_extended.cpp
这样,你的代码u8"\uxxx ..."或u8""(复制/粘贴)或u8"\U0001F600"将被翻译为一系列以UTF-8中的数字/代码存储在提供的char中。
当打印该char时,因为你使用了chcp 65001 Enter,输出将被翻译为所需的Unicode字符。
你可以尝试上面的代码,仔细阅读注释。
输入以下代码://cl /W4 /EHsc /source-charset:utf-8 /execution-charset:utf-8,如果在chcp Enter之后,Active code page是:1250 -> 这将将chcp的活动代码更改为:65001
// 当你在开发者命令行中输入chcp Enter时,输出可能是:Active code page: 1250,或其他。
// 如果你输入chcp 65001 Enter,你将得到Active code page: 65001
// 所以如果在cmd中首先输入:chcp 65001,你可以使用以下命令进行编译:
//cl /W4 /EHsc /source-charset:utf-8 mbs_extended.cpp mbs_extended.cpp
//执行(输出)字符集是在您在cmd中键入chcp 65001时决定的,或者如果活动代码页为1250时,您使用cl进行编译时决定的.../execution-charset:utf-8...
#include <iostream>
#include <windows.h>
using namespace std;
int main ()
{
const char *text = u8"This text is in UTF-8. ¡Olé! 佻\n";
std::cout << text;
char *s = u8"\u2193";
printf("\nSymbol: %s\n", s);
printf(" length: %zu\n", strlen(s));
size_t sz0 = strlen(s);
cout << "Arrow hexcode: ";
for(int i = 0; i < sz0; i++)
{
printf("%X ", (unsigned char) s[i] );
}
cout << endl;
char *s1 = u8"";
printf("\nSymbol: %s\n", s1);
size_t sz = strlen(s1);
printf(" length: %zu\n", strlen(s1));
cout << "Smiley hexcode: ";
for(int i = 0; i < sz; i++)
{
printf("%X ", (unsigned char) s1[i] );
}
cout << endl;
char *s2 = u8"\U0001F600";
printf("\nSymbol: %s\n", s2);
size_t sz1 = strlen(s2);
printf(" length: %zu\n", strlen(s2));
cout << "Smiley hexcode: ";
for(int i = 0; i < sz1; i++)
{
printf("%X ", (unsigned char) s2[i] );
}
cout << endl;
return 0;
}
type
е‘Ҫд»Өе’ҢдҪ зҡ„зЁӢеәҸеҒҡзҡ„жҳҜдёҖж ·зҡ„дәӢжғ…гҖӮжү“ејҖдёҖдёӘе‘Ҫд»ӨиЎҢзӘ—еҸЈпјҢиҫ“е…Ҙtype ASCII.txt
пјҢзңӢзңӢжҺ§еҲ¶еҸ°иҫ“еҮәдәҶд»Җд№ҲгҖӮ - undefinedtype
命令。 - undefined