c++11 标准模板(STL)本地化库 - 平面类别(std::codecvt) - 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (四)

本地化库

本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C++ 标准库的其他组件的行为。

平面类别

在字符编码间转换,包括 UTF-8、UTF-16、UTF-32

std::codecvt
template<

    class InternT,
    class ExternT,
    class State

> class codecvt;

std::codecvt 封装字符串的转换,包括宽和多字节,从一种编码到另一种。通过 std::basic_fstream<CharT> 进行的所有 I/O 操作都使用流中感染的 std::codecvt<CharT, char, std::mbstate_t> 本地环境平面。

继承图

标准库提供以下独立(本地环境无关)特化:

定义于头文件 <locale>

std::codecvt<char, char, std::mbstate_t>恒等转换
std::codecvt<char16_t, char, std::mbstate_t>在 UTF-16 和 UTF-8 间转换 (C++11 起)(C++20 中弃用)
std::codecvt<char16_t, char8_t, std::mbstate_t>在 UTF-16 和 UTF-8 间转换 (C++20 起)
std::codecvt<char32_t, char, std::mbstate_t>在 UTF-32 和 UTF-8 间转换 (C++11 起)(C++20 中弃用)
std::codecvt<char32_t, char8_t, std::mbstate_t>在 UTF-32 和 UTF-8 间转换 (C++20 起)
std::codecvt<wchar_t, char, std::mbstate_t>在系统原生宽和单字节窄字符集间转换

另外, C++ 程序中构造每个的 locale 对象实现其自身的四个特化的( locale 限定)版本。

成员类型

成员类型定义
intern_typeInternT
extern_typeExternT
state_typeState

调用 do_unshift & 为不完整转换生成 externT 字符的终止字符序列
std::codecvt<InternT,ExternT,State>::unshift, do_unshift
public:

result unshift( StateT& state,
                ExternT* to,
                ExternT* to_end,

                ExternT*& to_next) const;
(1)
protected:

virtual result do_unshift( StateT& state,
                           ExternT* to,
                           ExternT* to_end,

                           ExternT*& to_next) const;
(2)

1) 公开成员函数,调用最终导出类的成员函数 do_unshift

2) 若此 codecvt 所表示的编码依赖状态,而 state 表示的转换状态不是初始迁移状态,则写入返回初始迁移状态所需的字符。字符被写入首元素为 to 所指向的字符数组。不写入多于 to_end-to 个字符。更新参数 to_next 以指向最后写入字符的后一位置。

返回值

std::codecvt_base::result 类型值,指示成功状况如下:

ok已写入所有所需字符。 state 现在表示初始迁移状态
partial输出缓冲区中空间不足。 to_next == to_end
error出现未指明的错误
noconv编码不依赖状态,不需要终止序列

非转换特化 std::codecvt<char, char, std::mbstate_t> 始终返回 std::codecvt_base::noconv 。

注意

此函数为 std::basic_filebuf::close() 所调用,并在终止化依赖状态的多字节序列的情形中被调用。

调用示例

#include <iostream>
#include <string>
#include <locale>

int main()
{
    std::locale::global(std::locale("Chinese (Simplified)_China.936"));
    auto& use_facet = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(std::locale());
    std::string external = "ABCDEFG";
    // 注意 wstring_convert 能进行下列内容
    std::mbstate_t mbstate_t = std::mbstate_t(); // 初始迁移状态
    std::string internal(external.size(), '\0');
    char* to_next = nullptr;
    use_facet.unshift(mbstate_t,
                      &external[0], &external[external.size()], to_next);
    // 为简略跳过错误检查
    internal.resize(to_next - &internal[0]);
    std::cout << L"The string in wide encoding: " << internal << std::endl;

    return 0;
}

输出

#include <iostream>
#include <string>
#include <locale>

int main()
{
    std::locale::global(std::locale("Chinese (Simplified)_China.936"));
    auto& use_facet = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(std::locale());
    std::string external = "ABCDEFG";
    // 注意 wstring_convert 能进行下列内容
    std::mbstate_t mbstate_t = std::mbstate_t(); // 初始迁移状态
    std::string internal(external.size(), '\0');
    char* to_next = nullptr;
    use_facet.unshift(mbstate_t,
                      &external[0], &external[external.size()], to_next);
    // 为简略跳过错误检查
    internal.resize(to_next - &internal[0]);
    std::cout << "The string in wide encoding: " << to_next << std::endl;

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542305.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于机器学习/深度学习的一些事-答知乎问(一)

如何将领域知识融入到深度学习模型中&#xff1f; 在早期的研究阶段&#xff0c;大多基于经验和对问题的一些理解&#xff0c; 启发式地设计网络&#xff0c; 并通过端到端学习的方式得到解决具体问题的深度模型。这类方法在很多问题如图像识别中取得了巨大的成功&#xff0c;…

Spring Boot统一功能处理(一)

本篇主要介绍Spring Boot的统一功能处理中的拦截器。 目录 一、拦截器的基本使用 二、拦截器实操 三、浅尝源码 初始化DispatcherServerlet 处理请求&#xff08;doDispatch) 四、适配器模式 一、拦截器的基本使用 在一般的学校或者社区门口&#xff0c;通常会安排几个…

前后端分离vue.js+nodejs新闻文章发布论坛网站系统44x94

Vue&#xff1a; Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工具链以及…

网络篇01 | 入门篇

网络篇01 | 入门篇 01 各层协议目录[网络篇02 | 应用层 kcp&#xff08;王者荣耀&#xff09;](https://blog.csdn.net/qiushily2030/article/details/135835946)[网络篇03 | 应用层 quic](https://blog.csdn.net/qiushily2030/article/details/136192481)网络篇04 | 应用层 mq…

网络篇05 | 应用层 http/https

网络篇05 | 应用层 http/https 01 HTTP请求报文协议&#xff08;Request&#xff09;1&#xff09;Request简述2&#xff09;请求行&#xff08;首行&#xff09;3&#xff09;请求头&#xff08;Request Headers&#xff09;4&#xff09;空行5&#xff09;正文&#xff08;Re…

CCS中实时显示ADC采样波形

CCS软件中带有波形显示工具&#xff0c;在调试代码的过程中可以比较方便的将代码中待观测的变量直接用曲线的方式显示出来。   下面就演示一下如何在CCS中使用波形显示。这里使用28335芯片&#xff0c;用一个简单的工程来测试。 显示单个变量 #include "DSP2833x_Devi…

element-ui中el-radio-group组件绑定点击事件触发多次的解决办法

1、需求 电商首页需求&#xff0c;需要做个单选框&#xff0c;然后点击选中切换图标方向及更换价格升倒序&#xff0c;如下图&#xff1a; 从官网文档看&#xff0c;单选框支持change event&#xff0c;使用click加载按钮处不会触发选中 但是使用 click.native 事件不做处理…

【JVM】面试题汇总

JVM1. 什么是JVM&#xff1f;2. 了解过字节码文件的组成吗&#xff1f;3. 什么是运行时数据区4. 哪些区域会出现内存溢出5. JVM在JDK6-8之间在内存区域上有什么不同 6. 类的生命周期 7. 什么是类加载器&#xff1f;类加载器有哪几种 8. 什么是双亲委派机制&#xff1f;有什么好…

React脚手架的搭建与使用

React脚手架是开发现代Web应用的必备&#xff0c;其充分利用Webpack、Babel、ESlint等工具辅助项目的开发&#xff0c;当然这些工具也无需手动配置即可使用&#xff0c;脚手架的意义更多的是关注的是业务而不是工具的配置&#xff1b;项目的整体技术架构为&#xff1a;react w…

OJ在线编程常见输入输出练习

文章目录 整型输入输出12345 字符串类型输入输出123 整型输入输出 1 #include <stdio.h>int main() {int a, b;while (scanf("%d %d", &a, &b) ! EOF) { if(a0 && b0)break;printf("%d\n", a b);}return 0; }2 #include <stdio…

服装连锁管理系统如何拓展会员?

在服装连锁店的经营管理中&#xff0c;会员制度是提升客户忠诚度、促进销售增长的重要手段之一。拓展会员对于连锁店来说至关重要&#xff0c;可以通过多种方式来吸引新会员并提升会员的活跃度。本文将探讨如何通过拓展会员来提升服装连锁店的经营效益&#xff0c;并提出四点建…

CSS 实现无限波浪边框卡片

CSS 实现无限波浪边框卡片 效果展示 鼠标悬停效果&#xff0c;底部色块的边框是无限滚动的波浪 鼠标没有悬停效果 CSS 知识点 CSS 基础知识回顾使用 radial-gradient 实现波浪边框使用 anumate 属性实现波浪边框动画和控制动画运动 波浪实现原理 波浪边框的实现思路其…

Axure RP中的相关概念及高保真原型构建方法

1 Axure RP中概念介绍 对于构建高保真原型来说&#xff0c;需要知道事件&#xff08;Event&#xff09;、Case、Action等概念。Axure RP中给出这些概念&#xff0c;是为了方便原型的构建&#xff0c;尤其是高保真原型的构建。 事件&#xff08;Event&#xff09;是附着于控件…

如何下载pycharm历史版本

地址&#xff1a;https://www.jetbrains.com/pycharm/download/other.html

GitHub repository - Pulse - Contributors - Network

GitHub repository - Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津&#xff0c;还是在火热地开发之中&#xff0c;从这里可以一目了然。 2. Contributors 显示对该仓库进行过…

蓝桥杯备赛:考前注意事项

考前注意事项 1、DevCpp添加c11支持 点击 工具 - 编译选项 中添加&#xff1a; -stdc112、万能头文件 #include <bits/stdc.h>万能头文件的缺陷&#xff1a;y1 变量 在<cmath>中用过了y1变量。 #include <bits/stdc.h> using namespace std;// 错误示例 …

基于java+springboot+vue实现的智能停车计费系统(文末源码+Lw+ppt)23-30

摘 要 随着人们生活水平的高速发展&#xff0c;智能停车计费信息管理方面在近年来呈直线上升&#xff0c;人们也了解到智能停车计费的实用性&#xff0c;因此智能停车计费的管理也逐年递增&#xff0c;智能停车计费信息的增加加大了在管理上的工作难度。为了能更好的维护智能…

智慧农业引领乡村全面振兴:数字乡村建设推动农业现代化、农村治理现代化与农民生活品质新提升

文章摘要&#xff1a; 随着信息技术的迅猛发展&#xff0c;智慧农业正成为引领乡村全面振兴的重要力量。数字乡村建设以智慧农业为核心&#xff0c;推动农业现代化、农村治理现代化和农民生活品质新提升。本文将从智慧农业的内涵出发&#xff0c;探讨数字乡村建设如何推动农业现…

机器学习周报第37周

目录 一、文献阅读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection1.1 摘要1.2 背景1.3 论文模型1.4 网络设计1.5 YOLO的局限性1.6 实现代码 一、文献阅读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection 1.1 摘要 YOLO是一种新…

3D Showroom Level Kit Vol 1

3D Showroom Level Kit Vol 1是一个预制PBR模块化套件,可帮助您创建任何大小、类型的展厅/关卡! 你想推广新产品吗?制作严肃游戏?展示你的艺术?照片?VR应用程序?你需要这个。。。 该工具包非常易于使用和定制!更改颜色和道具位置。 使用移动设备和VR设备,低多边形建…