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步"所示。
相关推荐
lanhuazui1022 分钟前
【Vscode】显示多个文件 & 打开多个文件时实现标签栏多行显示
vscode·编辑器
八月正好an2 小时前
visual studio安装本地帮助手册
ide·visual studio
张较瘦_4 小时前
环境搭建 | [入门级]VSCode(Cursor|Trae|Qoder)搭建Java(Springboot3)企业开发环境全流程
java·ide·vscode
生莫甲鲁浪戴5 小时前
Android Studio新手开发第二十一天
android·ide·android studio
生莫甲鲁浪戴5 小时前
Android Studio新手开发第二十二天
android·ide·android studio
天赐细莲6 小时前
(Linux) WSL 通过 VSCode 连接不执行 profile 问题(登录Shell问题)
linux·运维·vscode
暮色驶过苍茫14 小时前
VSCode 配置 SSH 远程连接
ide·vscode·ssh
lichong95115 小时前
Android studio 修改包名
android·java·前端·ide·android studio·大前端·大前端++
微风粼粼18 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
fruge1 天前
Visual Studio 2022安装时共享组件、工具、SDK路径无法更改的问题
ide·visual studio