C++字符编码的查看和检测
1、查看字符编码
查询汉字GBK、UTF8、UNICODE编码的值的网站如下:
汉字字符集编码查询;中文字符集编码:GB2312、BIG5、GBK、GB18030、Unicode (qqxiuzi.cn)
“汉字”编码的数据如下:
现使用程序demo进行验证:
// Encode.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;//将wstring转换成string
string wstring2string(wstring wstr,UINT nCode)
{string result;//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 int len = WideCharToMultiByte(nCode, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);char* buffer = new char[len + 1];//宽字节编码转换成多字节编码 WideCharToMultiByte(nCode, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);buffer[len] = '\0';//删除缓冲区并返回值 result.append(buffer);delete[] buffer;return result;
}int main()
{char szChn1[20] = {"汉字"};wstring wstrChn = L"汉字";string strCh = wstring2string(wstrChn,CP_UTF8);char szChn2[20] = { 0 };int nSize = sizeof(strCh);int nlen = strCh.length();int nStrlen = strlen(strCh.c_str());strncpy_s(szChn2,strCh.c_str(), nStrlen);std::cout << "Hello World!\n";
}
上述程序的执行结果如下:
从上述的程序结果可以看出,szChn1的编码是BABAD7D6,是GBK编码;szChn2的字符编码是E6B189E5AD97,是UTF8编码。
注1:/***********************计算字符串长度函数简单比较**********************************/
(1)size()与length()完全等同,string的成员函数,遇到空字符不会被截断,可以返回字符串真实长度。
(2)strlen(),源于C语言,参数是char*,遇到空字符会截断,从而无法返回字符串真实长度。
(3) sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
注2:/***********************字符编码知识**********************************/
(1)ASCII 是美国国家标准学会制定的,使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
(2)GBK是中国信息技术标准化技术委员会制订表示汉字的编码,采用双字节编码方式。
(3)UNICODE是国际标准化组织定义一套编码方案来解决所有国家的编码问题,注意Unicode不是一个新的编码规则,而是一套字符集(为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)),可以将Unicode理解为一本世界编码的字典。
(4)UTF8:由于Unicode比较浪费网络带宽和硬盘,制订了UTF8,最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。UTF8是比较通用的编码方式。
ANSI是当前系统默认的编码,取决于电脑安装的字符,所以我们大多数电脑编码默认是GBK。
编码方式知识参考如下博文:ASCII,Unicode和UTF-8终于找到一个能完全搞清楚的文章了_Deft_MKJing宓珂璟的博客-CSDN博客_ascii和utf
还有一篇文章写的不错,如下:ASCII、Unicode、GBK、UTF-8之间的关系_longwen_zhi的博客-CSDN博客_ascii gbk
2、判断字符编码
判断字符编码的demo如下:
// Encode.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;//将wstring转换成string
string wstring2string(wstring wstr,UINT nCode)
{string result;//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 int len = WideCharToMultiByte(nCode, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);char* buffer = new char[len + 1];//宽字节编码转换成多字节编码 WideCharToMultiByte(nCode, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);buffer[len] = '\0';//删除缓冲区并返回值 result.append(buffer);delete[] buffer;return result;
}//
enum Encode { ANSI = 1, UTF16_LE, UTF16_BE, UTF8_BOM, UTF8 };Encode IsUtf8Data(const uint8_t* data, size_t size){bool bAnsi = true;uint8_t ch = 0x00;int32_t nBytes = 0;for (auto i = 0; i < size; i++){ch = *(data + i);if ((ch & 0x80) != 0x00){bAnsi = false;}if (nBytes == 0){if (ch >= 0x80){if (ch >= 0xFC && ch <= 0xFD){nBytes = 6;}else if (ch >= 0xF8){nBytes = 5;}else if (ch >= 0xF0){nBytes = 4;}else if (ch >= 0xE0){nBytes = 3;}else if (ch >= 0xC0){nBytes = 2;}else{return Encode::ANSI;}nBytes--;}}else{if ((ch & 0xC0) != 0x80){return Encode::ANSI;}nBytes--;}}if (nBytes > 0 || bAnsi){return Encode::ANSI;}return Encode::UTF8;}Encode DetectEncode(const uint8_t* data, size_t size){if (size > 2 && data[0] == 0xFF && data[1] == 0xFE){return Encode::UTF16_LE;}else if (size > 2 && data[0] == 0xFE && data[1] == 0xFF){return Encode::UTF16_BE;}else if (size > 3 && data[0] == 0xEF && data[1] == 0xBB && data[2] == 0xBF){return Encode::UTF8_BOM;}else{return IsUtf8Data(data, size);}}/
int main()
{char szChn1[5] = {"汉字"};wstring wstrChn = L"汉字";string strCh = wstring2string(wstrChn,CP_UTF8);char szChn2[7] = { 0 };int nSize = sizeof(strCh);int nlen = strCh.length();int nStrlen = strlen(strCh.c_str());strncpy_s(szChn2,strCh.c_str(), nStrlen);Encode emCode1;emCode1 = IsUtf8Data((const unsigned char*)szChn1,strlen(szChn1));Encode emCode2;emCode2 = IsUtf8Data((const unsigned char*)szChn2, strlen(szChn2));std::cout << "Hello World!\n";
}
执行结果如下:
上述demo中部分代码参考于C++判断字符串编码格式(ANSI\UTF16_LE\UTF16_BE\UTF8\UTF8_BOM)_xingyundandan的博客-CSDN博客_c++ 查看字符串的编码
C++字符编码的查看和检测相关推荐
- 小工具———字符编码转换查看(MFC)
-------------------------- 2020年6月4日09:38:54 更新 请移步另外一个简便完善版本工具 https://blog.csdn.net/xuebing1995/ar ...
- oracle查看数据库字符编码,oracle 查看、批改字符集编码
当前位置:我的异常网» 数据库 » oracle 查看.批改字符集编码 oracle 查看.批改字符集编码 www.myexceptions.net 网友分享于:2013-07-19 浏览:3次 ...
- mysql查看编码_mysql 字符编码的查看与修改
修改数据库字符集: 代码如下: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...]; 把表默认的字符集和 ...
- php 查看当前字符编码,PHP检测当前字符编码并转码
一.检测当前字符串编码并将编码改为utf-8 1 获取当前字符串的编码 $encode = mb_detect_encoding($str, array("ASCII",'UTF- ...
- php查看字符编码,PHP实现检测当前字符编码并转码的方法
本文主要和大家分享PHP实现检测当前字符编码并转码的方法,结合文字和代码,希望能帮助到大家. 一.检测当前字符串编码并将编码改为utf-8 1 获取当前字符串的编码 $encode = mb_dete ...
- MYSQL数据库字符编码设置
mysql字符集编码设置与查看命令 转自http://www.111cn.net/database/mysql/55781.htm 在mysql对字符编码的查看我们使用SHOW VARIABLES L ...
- mysql 数据库编码怎么看,查看数据库编码_查看mysql编码方式 mysql数据库编码查看方法...
摘要 腾兴网为您分享:查看mysql编码方式 mysql数据库编码查看方法,桌面日历,智能互联,政务易,优美图等软件知识,以及pptv版,广东省app,京东钱包app,星露谷物语补丁,51管家,翡翠出 ...
- mysql 编码格式_设置MySQL的字符编码
前言 这里我已经将MySQL的数据库编码设置为UTF-8,所以下面现实的都是UTF-8. 设置MySQL数据库的编码方式有三种,分别是基于session会话的.基于全局gloable的.永久性改变的. ...
- 设置mysql数据库的字符编码
1.首先连接到MySQL :mysql -uroot -p,输入密码连接 2.输入\s,即可查看数据库的字符编码 3.查看数据库的详细编码 输入:show variables like '%char% ...
- python 查看字符编码,[Python]判断系统编码和字符编码chardet
这里使用了字符编码判断的一个模块chardet 使用esay_install 直接安装就可以了 os环境win7 ide:wingide 1 使用默认环境编码 ''' 查看系统编码 ''' impo ...
最新文章
- 烂泥:高负载均衡学习haproxy之关键词介绍
- 科普帖:Linux操作系统
- android文件系统管理
- 栈和队列都是限制存取点的线性结构_栈的练习以及解析
- 共模电感适用的频率_详解消灭EMC的三大利器:电容器/电感/磁珠!
- 看看哪些小程序能帮你赚点零花钱!
- 微信推送封面尺寸_微信公众号封面图、正文配图尺寸如何?如何选择、制作?...
- Android 音频(一) _ 采样量化编码 AudioRecord 录制音频
- 伽罗华有限域_伽罗华域(Galois Field,GF,有限域)
- yyyy-mm-dd与yyyy-MM-dd的区别
- 好家伙,微信能设置2个头像了!
- 爱创课堂每日一题第二十三天- Expires和Cache-Control?
- 经常看到RS485和MODBUS写在一起,它们的区别和联系?
- QT:QBitArray
- error link1158 无法运行rc.exe
- 阿里90后程序员入选全球顶级开源社区技术委员会,网友:真大佬
- JAVA Bean 转换工具 BULL 使用简介
- 解密.ts视频文件(C#)
- VS Code 格式化 XML 文件的方法
- 浮点数(floating-point number)二进制存储格式
热门文章
- Code[VS]1159 最大全0子矩阵
- nodejs后台系列--第六篇-把nodejs后台部署到云服务器上面
- pvs、pvdisplay、pvscan 查看物理卷信息
- html中的form是空标签么,关于html 中form表单的内标签和使用
- plsql的异常提示怎么定位_PLSQL 异常处理(转)
- java excel通用导入类_java excel 文件导入通用接口
- W ndows10用于3D建模,Windows10系统自带3D builder应用有哪些作用
- mysql拼装字段_Mysql 实现字段拼接的三个函数
- FileZilla,读取目录列表失败(425 Can‘t open data connection.)的解决办法
- 构造者模式(Builder)