gpt4 book ai didi

c++ - 在C++中使用UTF-8 std::string对象

转载 作者:行者123 更新时间:2023-12-02 09:56:09 25 4
gpt4 key购买 nike

我正在Visual Studio上使用C++Windows来处理像ʜᴇʟʟᴏ ꜱᴛᴀᴄᴋᴏᴠᴇʀꜰʟᴏᴡ这样的小写字母文本,例如this网站。每当我从文件中读取此文本或使用std::string将其直接放入源代码时,Visual Studio中的文本可视化工具就会以错误的编码显示它,大概是可视化工具使用了Windows (ANSI)。如何强制Visual Studio让我正确处理UTF-8字符串?

std::string message_or_file_path = "...";
auto message = message_or_file_path;

// If the file path is valid, read from that file
if (GetFileAttributes(message_or_file_path.c_str()) != INVALID_FILE_ATTRIBUTES
&& GetLastError() != ERROR_FILE_NOT_FOUND)
{
std::ifstream file_stream(message_or_file_path);
std::string text_file_contents((std::istreambuf_iterator<char>(file_stream)),
std::istreambuf_iterator<char>());
message = text_file_contents; // Displayed in wrong encoding
message = "ʜᴇʟʟᴏ ꜱᴛᴀᴄᴋᴏᴠᴇʀꜰʟᴏᴡ"; // Displayed in wrong encoding
std::wstring wide_message = L"ʜᴇʟʟᴏ ꜱᴛᴀᴄᴋᴏᴠᴇʀꜰʟᴏᴡ"; // Displayed in correct encoding
}

我尝试了其他命令行选项 /utf-8来编译和设置区域设置:
std::locale::global(std::locale(""));
std::cout.imbue(std::locale());

这些都不能解决编码问题。

最佳答案

What’s Wrong with My UTF-8 Strings in Visual Studio?中,有几种方法可以查看采用UTF-8编码的std::string的内容。

假设您有一个具有以下初始化的变量:

std::string s2 = "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";

使用监视窗口。
  • 将变量添加到Watch。
  • 在“监视”窗口中,将,s8添加到变量名称以将其内容显示为UTF-8。

  • 这是我在Visual Studio 2015中看到的。

    image

    使用命令窗口。
  • 在命令窗口中,使用? &s2[0],s8将文本显示为UTF-8。

  • 这是我在Visual Studio 2015中看到的。

    image

    关于c++ - 在C++中使用UTF-8 std::string对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60010540/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com