当前位置: 首页 > news >正文

10 编码转换问题

文章目录

  • 字符编码问题
  • 编码转换问题
    • ANSI转Unicode
    • Unicode转ANSI
    • Utf8转 ANSI
    • utf8 转Unicode
    • ANSI 转UTF-8
    • Unicode 转 UTF-8
  • 全部代码

字符编码问题

在这里插入图片描述

Windows API 函数
MessageBoxA:MessageBox 内部实现,字符串编码(ANSI)转换成了Unicode,在调用MessageboxW
MessageBox:是一个宏定义
MessageBoxA(NULL,"Hello","提示",MB_OK);
MessageBoxW(NULL,L"Hello",L"提示",MB_OK);

编码转换问题

ANSI转Unicode

//ANSI转Unicode
wchar_t* CCharset::AnsiToUnicode(const char* str)
{if (m_wstr)//安全{delete m_wstr;m_wstr = NULL;}DWORD dwSize=::MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);//求宽字符的大小m_wstr = new wchar_t[dwSize];::MultiByteToWideChar(CP_ACP, 0, str, -1, m_wstr, dwSize);return m_wstr;
}

Unicode转ANSI

//Unicode转ANSI
char * CCharset::UnicodeToAnsi(const wchar_t * wstr)
{if (m_str){delete m_str;m_str = NULL;}DWORD dwSize=WideCharToMultiByte(CP_ACP, 0, wstr, -1,NULL,0,NULL,NULL);m_str = new char[dwSize];::WideCharToMultiByte(CP_ACP, 0, wstr, -1, m_str, dwSize, NULL, NULL);return m_str;
}

Utf8转 ANSI

char * CCharset::Utf8ToAnsi(const char * str)
{if (m_wstr){delete[] m_wstr;m_wstr = NULL;}if (m_str){delete[] m_str;m_str = NULL;}//UTF-8 转Unicodem_wstr= Utf8ToUnicode(str);//Unicode 转ANSIm_str= UnicodeToAnsi(m_wstr);return m_str;
}

utf8 转Unicode

wchar_t* CCharset::Utf8ToUnicode(const char * str)
{if (m_wstr){delete m_wstr;m_wstr = NULL;}DWORD dwSize=MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);m_wstr = new wchar_t[dwSize];memset(m_wstr, 0, dwSize*sizeof(wchar_t));//清空内存MultiByteToWideChar(CP_UTF8, 0, str, -1, m_wstr, dwSize);return m_wstr;
}

ANSI 转UTF-8

char* CCharset::AnsitoUtf8(const char* str)
{if (m_wstr){delete[] m_wstr;m_wstr = NULL;}if (m_utf8){delete[] m_utf8;m_utf8 = NULL;}//Ansi 转Unicodem_wstr= AnsiToUnicode(str);//Unicode 转UTF-8m_utf8=UnicodeToUtf8(m_wstr);return m_utf8;
}

Unicode 转 UTF-8

char * CCharset::UnicodeToUtf8(const wchar_t * wstr)
{if (m_utf8){delete[] m_utf8;m_utf8 = NULL;}DWORD dwSize=WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);m_utf8 = new char[dwSize];memset(m_utf8,0,dwSize);//清空内存WideCharToMultiByte(CP_UTF8, 0, wstr, -1, m_utf8, dwSize, NULL, NULL);return m_utf8;
}

全部代码

CCharset.h

#pragma once
class CCharset
{private:wchar_t* m_wstr;char* m_str;char* m_utf8;
public:CCharset();~CCharset();//ANSI转Unicodewchar_t* AnsiToUnicode(const char* str);//Unicode转ANSIchar* UnicodeToAnsi(const wchar_t* wstr);//UTF8 转ANSIchar* Utf8ToAnsi(const char* str);//ANSI转UTF - 8char* AnsitoUtf8(const char* str);//Unicode 转 UTF-8char* UnicodeToUtf8(const wchar_t* wstr);//UTF-8转Unicodewchar_t* Utf8ToUnicode(const char* str);};

CCharset.cpp

#include "pch.h"
#include "CCharset.h"CCharset::CCharset()
{m_wstr = NULL;m_str = NULL;m_utf8 = NULL;
}CCharset::~CCharset()
{if (m_wstr){delete m_wstr;m_wstr = NULL;}if (m_str){delete m_str;m_str = NULL;}if (m_utf8){delete[] m_utf8;m_utf8 = NULL;}
}//ANSI转Unicode
wchar_t* CCharset::AnsiToUnicode(const char* str)
{if (m_wstr)//安全{delete[] m_wstr;m_wstr = NULL;}DWORD dwSize=::MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);//求宽字符的大小m_wstr = new wchar_t[dwSize];::MultiByteToWideChar(CP_ACP, 0, str, -1, m_wstr, dwSize);return m_wstr;
}//Unicode转ANSI
char * CCharset::UnicodeToAnsi(const wchar_t * wstr)
{if (m_str){delete[] m_str;m_str = NULL;}DWORD dwSize=WideCharToMultiByte(CP_ACP, 0, wstr, -1,NULL,0,NULL,NULL);//求字符的大小m_str = new char[dwSize];::WideCharToMultiByte(CP_ACP, 0, wstr, -1, m_str, dwSize, NULL, NULL);return m_str;
}char * CCharset::Utf8ToAnsi(const char * str)
{if (m_wstr){delete[] m_wstr;m_wstr = NULL;}if (m_str){delete[] m_str;m_str = NULL;}//UTF-8 转Unicodem_wstr= Utf8ToUnicode(str);//Unicode 转ANSIm_str= UnicodeToAnsi(m_wstr);return m_str;
}char* CCharset::AnsitoUtf8(const char* str)
{if (m_wstr){delete[] m_wstr;m_wstr = NULL;}if (m_utf8){delete[] m_utf8;m_utf8 = NULL;}//Ansi 转Unicodem_wstr= AnsiToUnicode(str);//Unicode 转UTF-8m_utf8=UnicodeToUtf8(m_wstr);return m_utf8;
}//Unicode 转 UTF-8
char * CCharset::UnicodeToUtf8(const wchar_t * wstr)
{if (m_utf8){delete[] m_utf8;m_utf8 = NULL;}DWORD dwSize=WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);m_utf8 = new char[dwSize];memset(m_utf8,0,dwSize);//清空内存WideCharToMultiByte(CP_UTF8, 0, wstr, -1, m_utf8, dwSize, NULL, NULL);return m_utf8;
}//utf8 转Unicode
wchar_t* CCharset::Utf8ToUnicode(const char * str)
{if (m_wstr){delete m_wstr;m_wstr = NULL;}DWORD dwSize=MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);m_wstr = new wchar_t[dwSize];memset(m_wstr, 0, dwSize*sizeof(wchar_t));//清空内存MultiByteToWideChar(CP_UTF8, 0, str, -1, m_wstr, dwSize);return m_wstr;
}

相关文章:

10 编码转换问题

文章目录 字符编码问题编码转换问题ANSI转UnicodeUnicode转ANSIUtf8转 ANSIutf8 转UnicodeANSI 转UTF-8Unicode 转 UTF-8 全部代码 字符编码问题 Windows API 函数 MessageBoxA:MessageBox 内部实现,字符串编码(ANSI)转换成了Unicode,在调用MessageboxW MessageBox:…...

Spring MVC获取参数和自定义参数类型转换器及编码过滤器

目录 一、使用Servlet原生对象获取参数 1.1 控制器方法 1.2 测试结果 二、自定义参数类型转换器 2.1 编写类型转换器类 2.2 注册类型转换器对象 2.3 测试结果 三、编码过滤器 3.1 JSP表单 3.2 控制器方法 3.3 配置过滤器 3.4 测试结果 往期专栏&文章相关导读…...

理想的实验

1.关于“问题”的问题 一项研究计划可以围绕四个基本问题(frequently asked questions,FAQ)展开: 研究对象间的(因果)关系(relationship of interest) 这里更关注的是“因果关系”&#xff0c…...

nginx配置开机启动(Windows环境)

文章目录 1、下载nginx,并解压2、配置nginx.conf,并启动Nginx3、开机自启动 1、下载nginx,并解压 2、配置nginx.conf,并启动Nginx 两种方法: 方法一:直接双击nginx.exe,双击后一个黑色弹窗一闪…...

MySQL 基础面试题02(事务索引)

1.什么是 MySQL 事务? MySQL 事务是指一组操作,是一个不可分割的工作单位,可以确保一组数据库操作要么全部执行,要么全部不执行。换句话说,事务是 MySQL 中保证数据一致性和完整性的机制。 在 MySQL 中,事…...

主从架构lua脚本-Redis(四)

上篇文章介绍了rdb、aof持久化。 持久化RDB/AOF-Redis(三)https://blog.csdn.net/ke1ying/article/details/131148269 redis数据备份策略 写job每小时copy一份到其他目录。目录里可以保留最近一个月数据。把目录日志保存到其他服务器,防止机…...

maven与idea版本适配问题

maven与idea版本适配问题 1.版本对应关系——3.6.3 注意:针对一些老项目 还是尽量采用 3.6.3版本,针对idea各个版本的兼容性就很兼容 0.IDEA 2022 兼容maven 3.8.1及之前的所用版本 1.IDEA 2021 兼容maven 3.8.1及之前的所用版本 2.IDEA 2020 兼容Mave…...

ChatGPT扫盲知识库

本文并不是教你如何使用ChatGPT,而是帮助小白理清一些与ChatGPT相关的概念,并解释一些常见的问题。 概念 OpenAI: 一家人工智能公司,ChatGPT属于该公司的产品之一。前身是一个非盈利组织,不过目前已经转变为一家商业公司。 GPT: O…...

chatgpt赋能python:Python轨迹可视化:用数据讲故事

Python轨迹可视化:用数据讲故事 介绍 随着物联网、智能城市等领域的发展,越来越多的数据被收集下来并存储在数据库中。这些数据对于决策者来说是非常重要的,但是如何将这些数据进行展示和分析呢?这时候Python轨迹可视化就可以派…...

K-means

K-means 主要缺点:对于高维度数据,用kmeans方法可能会受到数据形态的影响,其假设高维数据呈球形分布。...

归并排序(基础+提升)

目录 归并排序的理论知识 归并排序的实现 merge函数 递归实现 递归改非递归 归并排序的性能分析 题目强化 题目一:小和问题 题目二:求数组中的大两倍数对数量 题目三:LeetCode_327. 区间和的个数 归并排序的理论知识 归并排序&…...

MATLAB应用

目录 网站 智能图像色彩缩减和量化 网站 https://yarpiz.com/ 智能图像色彩缩减和量化 使用智能聚类方法:(a)k均值算法,(b)模糊c均值聚类(FCM)和(c)自组织神…...

LeetCode --- 1784. Check if Binary String Has at Most One Segment of Ones 解题报告

Given a binary string s ​​​​​without leading zeros, return true​​​ if s contains at most one contiguous segment of ones. Otherwise, return false. Example 1: Input: s = "1001" Output: false Explanation: The ones do not form a contiguous s…...

js:javascript中的事件体系:常见事件、事件监听、事件移除、事件冒泡、事件捕获、事件委托、阻止事件

参考资料 事件介绍Element事件 目录 常见的事件鼠标事件键盘事件Focus events 添加事件监听方式一:addEventListener()(推荐)方式二:事件处理器属性方式三:内联事件处理器(不推荐) 移除监听器方…...

【数据结构】特殊矩阵的压缩存储

🎇【数据结构】特殊矩阵的压缩存储🎇 🌈 自在飞花轻似梦,无边丝雨细如愁 🌈 🌟 正式开始学习数据结构啦~此专栏作为学习过程中的记录🌟 文章目录 🎇【数据结构】特殊矩阵的压缩存储&#x1f38…...

在layui中使用vue,使用vue进行页面数据部分数据更新

layui是一款非常优秀的框架,使用也非常的广泛,许多后台管理系统都使用layui,简单便捷,但是在涉及页面部分数据变化,就比较难以处理,比如一个页面一个提交页,提交之后部分数据实时进行更新&#…...

Vue中如何进行数据导入与Excel导入

Vue中如何进行数据导入与Excel导入 Vue是一款非常流行的JavaScript框架,它提供了一套用于构建用户界面的工具和库。在Vue中,我们可以使用多种方式来导入数据,包括从服务器获取数据、从本地存储获取数据、从文件中读取数据等等。其中&#xf…...

git 的基本操作

1. git建立本地仓库 在想要建立的目录下输入命令 git init 我们可以看一下 .git目录下有什么 2. 配置git本地仓库 配置用户的 name 和 email 命令:git config [...] 配置完后,我们像查看一下 刚才的配置 2.1 查看配置命令 git config -l 2.2 删除…...

搭建Vue项目以及项目的常见知识

前言:使用脚手架搭建vue项目,使用脚手架可以开发者能够开箱即用快速地进行应用开发而开发。 搭建 #创建一个基于 webpack 模板的新项目 vue init webpack my-project #选择所需要的选项如图: cd my-project npm run dev访问localhost:808…...

TypeScript ~ TS Webpack构建工具 ⑦

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

Java编程之桥接模式

定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...