繁体   English   中英

有没有一种在Visual Studio中编写UTF-8八位字节的简单方法?

[英]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,但仍然无法执行您想要的操作。 在编译时,这些字节要么映射到当前代码页中的字符,要么得到警告。

因此,现在创建字符串文字的最便携方式是显式地编写八位字节,就像你一直在做的那样。

如果要进行运行时转换,可以选择几种方法。

  1. Windows API具有WideCharToMultiByte ,它可以将文本作为UTF-16并将其转换为UTF-8等多字节编码。
  2. 如果您使用的是足够新版本的编译器和C ++运行时,则可以使用std::codecvt将宽字符串转换为UTF-8。

您可以使用这些技术之一编写一个实现转换的小实用程序,并将它们输出为字符串文字所需的显式八位字节。 然后,您可以将输出复制并粘贴到源代码中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM