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步"所示。
相关推荐
只是橘色仍温柔2 小时前
xshell可以ssh连接,但vscode不行
运维·vscode·ssh
SHtop115 小时前
Eclipse IDE
ide·eclipse
吉均6 小时前
如何实现局域网内无痛访问Jupyter Notebook?
ide·python·jupyter
A__tao6 小时前
SQL 转 PHP Eloquent、Doctrine ORM, 支持多数据库
android·ide·android studio
Tee xm16 小时前
清晰易懂的VSCode加Cline插件使用不同API提供商实现AI编程
vscode·ai编程·安装
1alisa16 小时前
Sublime Text for Mac v4【注册汉化版】代码编辑器
macos·编辑器·sublime text
神码编程17 小时前
【Unity】 HTFramework框架(六十四)SaveDataRuntime运行时保存组件参数、预制体
unity·编辑器·游戏引擎
William.csj17 小时前
Linux——开发板显示器显示不出来,vscode远程登录不进去,内存满了的解决办法
linux·vscode
mzak19 小时前
vscode集成deepseek实现辅助编程(银河麒麟系统)【详细自用版】
linux·vscode·编辑器·银河麒麟·deepseek
JCBP_19 小时前
数据结构3
服务器·c语言·数据结构·vscode