Visual Studio utf-8 格式

Visual Studio utf-8 formatting

提问人:yakubiq 提问时间:7/11/2023 更新时间:7/12/2023 访问量:130

问:

我正在用 c++ 创建一个服务器,我决定用我的母语来做,但是当我编译它时,我只是得到这个胡言乱语,我不知道如何解决它。我尝试了多种方法,但 Visual Studio 只是一个我似乎无法弄清楚的谜语。

    std::cout << ">> Připojení k serveru úspěšné" << std::endl;

当我编译它时,它看起来像这样

>> P?ipojenφ k serveru ·sp?ÜnΘ

它是隐藏在设置中的某个地方,还是我是否包含一些标题?

C++ Visual-Studio UTF-8 格式

评论

4赞 Panagiotis Kanavos 7/11/2023
""一开始就不是 UTF8 字符串文本。用于 UTF8 字符串文本,并确保将文件另存为 UTF8。如果将文件另存为 Latin1,则任何非 Latin1 文本都会被篡改u8".."
0赞 Panagiotis Kanavos 7/11/2023
此外,Windows 是一个 Unicode 操作系统。自 1990 年代后期 Windows NT 系列开始以来,所有应用程序都使用 UTF16,而不是 UTF8。Win32 API 需要双字节字符,ASCII API 用于与非 Unicode 应用兼容。甚至“系统代码页”实际上也是非 Unicode 应用程序的默认代码页,而不是 Windows 本身的代码页。使用 或更新的等wstringwcoutu16string
1赞 yakubiq 7/11/2023
@PanagiotisKanavos不知道,感谢您提供的信息,但是两者都不起作用u8""std::wcout
1赞 Remy Lebeau 7/11/2023
@yakubiq “当我编译它时,看起来像这样”——到底指的是什么?控制台输出?内存缓冲区?通信数据?你能说得更具体一点吗?
0赞 yakubiq 7/11/2023
@RemyLebeau是的,对不起。当我启动调试器时,控制台输出。

答:

0赞 JosefZ 7/12/2023 #1

阅读并遵循 UTF-8 Everywhere;甚至 Microsoft 也鼓励所有 Windows 用户(和开发人员)在 Windows 应用程序中使用 UTF-8 代码页

使用 UTF-8 字符编码以实现最佳兼容性 Web 应用程序和其他基于 *nix 的平台(Unix、Linux 和变体), 最大限度地减少本地化错误,并减少测试开销。

UTF-8是国际化的通用代码页,并且是 能够对整个 Unicode 字符集进行编码。它被使用 在网络上无处不在,并且是基于 *nix 的平台的默认设置。

按照上面的参考,我从头开始创建了一个空的控制台应用程序(在 Microsoft Visual Studio 19 中),最终以以下代码结束(另存为编码文件):UTF-8.cpp

#include <windows.h>
#include <iostream>

#pragma execution_character_set( "utf-8" )

int main(int argc, char* argv[])
{
    // SetConsoleOutputCP(65001);
    // SetConsoleCP(CP_UTF8);
    std::cout << ">> 😂 Ελληνικά 😃 Русский 😄 Češtinář" << std::endl;
    std::cout << ">> Připojení k serveru úspěšné" << std::endl;

    for (int i = 1; i < argc; ++i)
    {
        printf("param %d = %s\n", i, argv[i]);
    }
    return 0;
}

项目属性、C/C++ 命令行参数(调试配置):

/JMC /permissive- /ifcOutput "x64\Debug\" /GS /W3 /Zc:wchar_t /ZI /Gm- /Od /sdl /Fd"x64\Debug\vc142.pdb" /Zc:inline /fp:precise /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /FC /Fa"x64\Debug\" /EHsc /nologo /Fo"x64\Debug\" /Fp"x64\Debug\So76656796.pch" /diagnostics:column 

输出显示所有字符串(硬编码的字符串或作为命令行参数传递的字符串)均得到正确处理:

So76656796.exe Ελληνικά Русский Češtinář 😂😃😄
>> 😂 Ελληνικά 😃 Русский 😄 Češtinář
>> Připojení k serveru úspěšné
param 1 = Ελληνικά
param 2 = Русский
param 3 = Češtinář
param 4 = 😂😃😄

评论

0赞 yakubiq 7/12/2023
嗨,非常感谢。它本身不起作用,但后来我添加了它,它工作得很好。#pragma execution_character_set( "utf-8" )SetConsoleOutputCP(CP_UTF8);