[英]Is there an easy way to write UTF-8 octets in Visual Studio?
我有一个问题,我需要在C ++源代码中使用标准字符类型的UTF-8编码字符串,如下所示:
char* twochars = "\xe6\x97\xa5\xd1\x88";
通常,如果我想写一个UTF-8字符,我需要使用上面的八位字节。 Visual Studio中有什么东西(我使用VS 2013 Ultimate)可以让我只编写例如“ĄĘĆŻ”并自动将每个字符转换为多个UTF-8八位字节,如上例所示? 或者我应该使用const wchar_t*
并找到一个可以将宽字符串转换为UTF-8编码的标准字符串字符串的库?
如果没有这样的东西,你能为此建议任何外部软件吗? 我真的不想浏览每个符号/非拉丁字母的字符映射。
对不起我的英文,提前致谢。
您可以使用仍未记录的 pragma指令execution_character_set("utf-8")
。 这样你的char
字符串将在你的二进制文件中保存为UTF-8。 顺便说一句,这个pragma仅在Visual C ++编译器中可用。
#include <iostream>
#include <cstring>
#pragma execution_character_set("utf-8")
using namespace std;
char *five_chars = "ĄĘĆŻ!";
int _tmain(int argc, _TCHAR* argv[])
{
cout << "This is an UTF-8 string: " << five_chars << endl;
cout << "...it's 5 characters long" << endl;
cout << "...but it's " << strlen(five_chars) << " bytes long" << endl;
return 0;
}
使用当前版本的VC ++,无法直接在UTF-8中编写字符串文字。 未来版本应具有UTF-8字符串文字 。
我尝试将非ASCII文本直接粘贴到源文件中的字符串文字中,并将文件保存为UTF-8。 在十六进制编辑器中查看源文件,确认它已保存为UTF-8,但仍然无法执行您想要的操作。 在编译时,这些字节要么映射到当前代码页中的字符,要么得到警告。
因此,现在创建字符串文字的最便携方式是显式地编写八位字节,就像你一直在做的那样。
如果要进行运行时转换,可以选择几种方法。
std::codecvt
将宽字符串转换为UTF-8。 您可以使用这些技术之一编写一个实现转换的小实用程序,并将它们输出为字符串文字所需的显式八位字节。 然后,您可以将输出复制并粘贴到源代码中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.