08.VSCODE:内嵌MSYS2及三方库UTF8-CPP的实战

在VSCode中集成 MSys2 终端,能让我们的开发过程更顺畅。作为示例,本课以utf8-cpp 为例,演示了在VSCode中一体化安装、使用第三方库的丝滑过程。

注:utf8-cpp是一个历史悠久的 C++ 字符串编码转换库,主要用于unicode字符集下多种编码的互相转换。


本课堂最佳学习次序建议:按本文安排,先阅读部分文字内容,再看文中视频,然后配合文末资料动手操作

0. 为什么要在 vscode 里集成 msys2 终端?

在vscode 中集成 msys2 终端,并非开发的必要步骤。

想要安装第三方库,完全可以在 msys2 自己提供的那个终端程序中,或者前面课程中我们集成在 Windows 终端下集成的 msys2 环境里安装。

不过,想像一下,你在 vscode 里写着代码,发现需要安装一个第三方库------并且这个库正好在 msys2 的仓库中,于是你按下热键 Ctrl + Shift + ` ,打开 vscode 的终端,再打开集成的 msys2,通过 pacman -S 库名,安装好所需库。切回源代码,开始在项目中使用中这个库......

是不是感觉这个过程很丝滑?

1. utf8-cpp 是什么?

网址:<github.com/nemtrif/utfcpp> 。

因为是 github,所以可能一时打不开,可换个时间段多尝试几次。

我们很快会推出专讲 utf8-cpp 库的独立课程。这里仅作简单介绍。

C/C++ 编程,所使用的字符串主力编码是 utf8(包括源代码文件自身的编码),但是,不少其他编程语言它们的主力编码是 UCS32 或 UCS16。因此,当 C++ 写的程序需要和别的语言写的程序交换数据(可能通过网络通信,也可能是读取对方生成的数据文件等手段),收到的数据可能是 UCS32 或 UCS16 等其他编码,此时 C++ 程序为了方便处理这些数据,第一步要做的,就是将它们转换成 utf8 编码。

反过来,如果需要将数据发送给别的程序,C++程序有可能需要将 utf8 编码的字符串,转换成 UCS32 或 UCS16等其他编码。

以上转换过程,可以使用 utf80cpp 这个库。这是一个纯头文件的库,因此使用起来很方便,并且支持多个平台(Windows、Linux 等)。

2. 课堂视频

(很短,6分钟,具体设置内容,代码等,学习时以总体上理解为主;无需在观看视频时细究内容,具体内容都已为您细心地附在本文后续文本内容中)

VSCODE.07-内嵌MSYS2及三方库utf8cpp实战

3. 关键配置内容

一、在 vscode 中切换到需集成 msys2 的开发专用配置。本课程之前准备的 CS-Cpp-Simple 或 CM-Cpp-CMake 建议都集成。其中,CMake 的项目使用第三方库的可能性更高。

二、Ctrl+, 进入设置,确保选中 "用户" 级别设置。在设置过滤栏中,输入以下关键词:Terminal Integrated Profiles Windows,再点击该设置项的内的 在 settings.json中编辑 链接,将打开该设置文件以直接编辑。

三、在 "terminal.integrated.profiles.windows" 项内最后,添加以下内容:

json 复制代码
,
"MSYS2-UCRT64": {
            "path": "C:\\msys64\\msys2_shell.cmd", 
            "args":[
                "-defterm", "-here", "-no-start", "-ucrt64"
            ],            
            "icon": "terminal-bash",
            "overrideName": true            
        }

注意:

  1. 其中的 "path" 字段的路径,替换成你的msys2实际安装的路径,且注意添加转义符;
  2. icon 只能是vscode 内置图标的名称 (输入时,vscode 会自动给出列表);
  3. "overrideName" 项在视频中没有讲,作用是确保使用 "MSYS2-UCRT64" 作为终端名字,包括打开该终端后显示的内容(否则会显示终端的实际进程名字 "bash");
  4. "-ucrt64" 和你当初安装 msys2 的选择有关,详见本课程第一课。

4. utf8-cpp 安装

以 64 位,ucrt 环境为例,utf8cpp 的包名字为 mingw-w64-ucrt-x86_64-utf8cpp。可以在集成的 msys2 终端内,通过执行以下指令搜索及安装该开发库。

(一)搜索(可选步骤)
pacman -Ss mingw-w64-ucrt-x86_64-utf8cpp

(二)安装
pacman -S mingw-w64-ucrt-x86_64-utf8cpp

5. utf8-cpp 使用示例

  • 完整代码
cpp 复制代码
#include <iostream>
#include <string>

#include <utf8cpp/utf8.h>

int main()
{
    std::wstring wstr = L"我是 UNICODE 字符集下的宽字符";  // Windows 下宽字符串

    // 目标: 将 wstring -> string (utf-8 编码)

    // 第1步:先转为固定的 32 位编码:
    std::u32string u32str { wstr.cbegin(), wstr.cend() };

    // 第2步:再转为 utf-8 编码:
    std::string utf8str = utf8::utf32to8(u32str); 

    // 输出结果:
    std::cout << utf8str << std::endl;
}
  • 难点、关键点解释
  1. std::u32string 是 C++11 引入的字符串类型,用于存储、表达每个字符固定为 32 位(四字节)的字符串;
  2. std::wstring 宽字符串,可用 L"字符串内容" 的字面值初始化。该类型的最大问题是平台相关(Windows 下2字节,Linux 等平台下 4 字节);
  3. std::wstring 可直接转换成 std::u32string,如代码中"第1步"所示;
  4. utf8::utf32to8()函数可将 std::u32string 转换成 std::string(以 utf-8编码),如代码中"第2步"所示。
相关推荐
mcusun20004 小时前
VScode 使用Deepseek又方便又好用的另一款插件
ide·vscode·编辑器·deepseek
leoufung5 小时前
VIM FZF 安裝和使用
linux·编辑器·vim
CodeWithMe6 小时前
[ Vim ] 常用命令 and 配置
linux·编辑器·vim
luoyayun3616 小时前
Trae+Qt+MSVC环境配置
vscode·qt·环境配置·trae qt
莲动渔舟7 小时前
国产编辑器EverEdit - 洞察秋毫!内置文件比较功能!
编辑器·emeditor·notepad·everedit
HealthScience7 小时前
【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示
ide·python·pycharm
waicsdn_haha10 小时前
Visual Studio Code 2025 安装与高效配置教程
c语言·ide·windows·vscode·微软·编辑器·win7
莲动渔舟12 小时前
国产编辑器EverEdit - 在编辑器中对文本进行排序
java·开发语言·编辑器
镰圈量化13 小时前
当电脑上有几个python版本Vscode选择特定版本python
开发语言·vscode·python
树欲静而风不止慢一点吧15 小时前
Visual Studio 2022配置网址参考
ide·visual studio