提问人:keen 提问时间:7/9/2023 最后编辑:Kesto2keen 更新时间:7/9/2023 访问量:84
如何正确存储中文字符串?
How to store the Chinese strings correctly?
问:
在 Visual Studio 2022 中,使用 [标记:C++ 17]。我正在尝试使用 a 来存储中文字符串:std::map
std::map<std::string, std::string> translation;
translation["Type"] = "类型";
插入值后,翻译中的字符串为问号 (??
)
我尝试使用:
#pragma execution_character_set("utf-8")
然后翻译中的字符串成为一些垃圾值。
如何正确存储中文字符串?请帮忙。
答:
2赞
Serge Ballesta
7/9/2023
#1
编译指示不是你想要的。它只是要求编译器在可执行文件中以 utf-8 格式对字符串进行编码。但是,在可执行文件中对其进行编码之前,字符串必须存在于源文件中。在屏幕上显示它不是问题,因为 Windows 原生使用 16 位字符,它可以轻松显示汉字。
但是源文件编码通常只是简单的 8 位字符编码。在我的法语系统中,它默认使用 1252 代码页,这是 ISO-8859-1 字符集的细微变化。并且无法在此编码中对中文字符进行编码,因此 VisualStudio 在 c++ 文件级别用问号替换有问题的字符。
因此,唯一可靠的方法是要求 VisualStudio 在保存文件时使用不同的编码。通常,它应该在第一次保存文件时询问您,但您可以强制它使用不同的编码重写文件
文件/另存为。然后,可以将“保存”按钮切换为 。
现在,您可以使用本机 UTF16 little-endian (1200) 或 utf-8 (65001) 将中文字符成功写入源文件。然后,您将在可执行文件中获得正确的 utf8 编码。Save with encoding...
但是,为了能够在运行时显示它们,您当然必须使用 GUI 应用程序(本机启用 unicode)或在 Windows 控制台中为控制台应用程序安装可接受的代码页......
评论