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++字符编码的查看和检测相关推荐

  1. 小工具———字符编码转换查看(MFC)

    -------------------------- 2020年6月4日09:38:54 更新 请移步另外一个简便完善版本工具 https://blog.csdn.net/xuebing1995/ar ...

  2. oracle查看数据库字符编码,oracle 查看、批改字符集编码

    当前位置:我的异常网» 数据库 » oracle 查看.批改字符集编码 oracle 查看.批改字符集编码 www.myexceptions.net  网友分享于:2013-07-19  浏览:3次 ...

  3. mysql查看编码_mysql 字符编码的查看与修改

    修改数据库字符集: 代码如下: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...]; 把表默认的字符集和 ...

  4. php 查看当前字符编码,PHP检测当前字符编码并转码

    一.检测当前字符串编码并将编码改为utf-8 1 获取当前字符串的编码 $encode = mb_detect_encoding($str, array("ASCII",'UTF- ...

  5. php查看字符编码,PHP实现检测当前字符编码并转码的方法

    本文主要和大家分享PHP实现检测当前字符编码并转码的方法,结合文字和代码,希望能帮助到大家. 一.检测当前字符串编码并将编码改为utf-8 1 获取当前字符串的编码 $encode = mb_dete ...

  6. MYSQL数据库字符编码设置

    mysql字符集编码设置与查看命令 转自http://www.111cn.net/database/mysql/55781.htm 在mysql对字符编码的查看我们使用SHOW VARIABLES L ...

  7. mysql 数据库编码怎么看,查看数据库编码_查看mysql编码方式 mysql数据库编码查看方法...

    摘要 腾兴网为您分享:查看mysql编码方式 mysql数据库编码查看方法,桌面日历,智能互联,政务易,优美图等软件知识,以及pptv版,广东省app,京东钱包app,星露谷物语补丁,51管家,翡翠出 ...

  8. mysql 编码格式_设置MySQL的字符编码

    前言 这里我已经将MySQL的数据库编码设置为UTF-8,所以下面现实的都是UTF-8. 设置MySQL数据库的编码方式有三种,分别是基于session会话的.基于全局gloable的.永久性改变的. ...

  9. 设置mysql数据库的字符编码

    1.首先连接到MySQL :mysql -uroot -p,输入密码连接 2.输入\s,即可查看数据库的字符编码 3.查看数据库的详细编码 输入:show variables like '%char% ...

  10. python 查看字符编码,[Python]判断系统编码和字符编码chardet

    这里使用了字符编码判断的一个模块chardet 使用esay_install 直接安装就可以了 os环境win7  ide:wingide 1 使用默认环境编码 ''' 查看系统编码 ''' impo ...

最新文章

  1. 烂泥:高负载均衡学习haproxy之关键词介绍
  2. 科普帖:Linux操作系统
  3. android文件系统管理
  4. 栈和队列都是限制存取点的线性结构_栈的练习以及解析
  5. 共模电感适用的频率_详解消灭EMC的三大利器:电容器/电感/磁珠!
  6. 看看哪些小程序能帮你赚点零花钱!
  7. 微信推送封面尺寸_微信公众号封面图、正文配图尺寸如何?如何选择、制作?...
  8. Android 音频(一) _ 采样量化编码 AudioRecord 录制音频
  9. 伽罗华有限域_伽罗华域(Galois Field,GF,有限域)
  10. yyyy-mm-dd与yyyy-MM-dd的区别
  11. 好家伙,微信能设置2个头像了!
  12. 爱创课堂每日一题第二十三天- Expires和Cache-Control?
  13. 经常看到RS485和MODBUS写在一起,它们的区别和联系?
  14. QT:QBitArray
  15. error link1158 无法运行rc.exe
  16. 阿里90后程序员入选全球顶级开源社区技术委员会,网友:真大佬
  17. JAVA Bean 转换工具 BULL 使用简介
  18. 解密.ts视频文件(C#)
  19. VS Code 格式化 XML 文件的方法
  20. 浮点数(floating-point number)二进制存储格式

热门文章

  1. Code[VS]1159 最大全0子矩阵
  2. nodejs后台系列--第六篇-把nodejs后台部署到云服务器上面
  3. pvs、pvdisplay、pvscan 查看物理卷信息
  4. html中的form是空标签么,关于html 中form表单的内标签和使用
  5. plsql的异常提示怎么定位_PLSQL 异常处理(转)
  6. java excel通用导入类_java excel 文件导入通用接口
  7. W ndows10用于3D建模,Windows10系统自带3D builder应用有哪些作用
  8. mysql拼装字段_Mysql 实现字段拼接的三个函数
  9. FileZilla,读取目录列表失败(425 Can‘t open data connection.)的解决办法
  10. 构造者模式(Builder)