Visual Studio(C++)中切换UTF-16编码及控制台输出UTF-16字符咨询
Visual Studio中C++项目编码切换与UTF-16字符输出方案
一、能否将项目编码从UTF-8切换为UTF-16?
完全可以。Visual Studio允许调整源文件的保存编码,以及编译阶段使用的字符集参数,以此实现从UTF-8到UTF-16的切换。
二、切换项目编码到UTF-16的具体操作
- 单个源文件编码调整:右键目标
.cpp/.h文件 → 选择「高级保存选项」→ 在「编码」下拉列表中选「Unicode (UTF-16 带签名) - 代码页 1200」或「Unicode (UTF-16 无签名) - 代码页 1201」,保存生效。 - 项目默认编码设置:顶部菜单「工具」→「选项」→ 展开「文本编辑器」→「所有语言」→「文件」→ 在「编码」下拉框中选定目标UTF-16选项,点击确定后,后续新建的源文件会默认使用该编码。
- 编译字符集配置:右键项目 →「属性」→「配置属性」→「常规」→ 找到「字符集」选项,选择「使用Unicode字符集」。这一步会让编译器自动定义
_UNICODE和UNICODE宏,适配UTF-16相关的Windows API与标准库行为。
三、无需切换编码的UTF-16字符输出方案
如果不想改动项目编码,也能直接输出目标字符,两种常用方法如下:
方法1:使用std::wcout配合控制台编码设置
#include <iostream> #include <windows.h> int main() { // 将控制台输出编码设置为UTF-16 SetConsoleOutputCP(CP_UTF16); // 直接输出宽字符常量(前缀L表示UTF-16编码) std::wcout << L"ąėųž" << std::endl; return 0; }
方法2:UTF-16转UTF-8后用std::cout输出
#include <iostream> #include <string> #include <windows.h> int main() { // 设置控制台输出为UTF-8 SetConsoleOutputCP(CP_UTF8); std::wstring utf16_str = L"ąėųž"; // 计算转换后的UTF-8字符串长度 int utf8_buf_size = WideCharToMultiByte(CP_UTF8, 0, utf16_str.c_str(), -1, nullptr, 0, nullptr, nullptr); std::string utf8_str(utf8_buf_size, 0); // 执行UTF-16到UTF-8的转换 WideCharToMultiByte(CP_UTF8, 0, utf16_str.c_str(), -1, utf8_str.data(), utf8_buf_size, nullptr, nullptr); std::cout << utf8_str << std::endl; return 0; }
内容的提问来源于stack exchange,提问作者user19964717
相关产品推荐
相关产品推荐

