字符编码--字符与数字的对应
1 ASC
7位二进制数表示一个字符,共128个字符。
英语字母大小写、阿拉伯数字、标点符号。
2 ASCII
American Standard Code for Information Interchange美国信息交换标准代码
8位二进制数表示一个字符,共256个字符。增加欧洲语言字符。
通过代码页(CodePage)标识不同的字符集。
不同字符集的前128个字符都相同,后128个字符因不同语言而异。
英语 - 437
中文 - 936
通过SetConsoleOutputCP函数设置控制台的代码页。
3 MBCS/DBCS
Multi-Byte Character Set/Double-Byte Character Set
多字节字符集/双字节字符集
用1个或2个字节表示一个字符。单双字节混合容易出现乱码。
C语言
-- ----- -----
43 D3 EF D1 D4
----- ----- --
<乱码>
strlen函数返回5。
4. UNICODE/UCS-2
Universal CODE/Universal Character Set with 2 bytes
通用码/2字节通用字符集
1) 统一用2个字节表示一个字符。
某些字符中可能含有空字符,需要特殊的处理函数。
C语言
----- ----- -----
43 00 ED 8B 00 8A
^^^^
strlen函数返回1。
wcslen函数返回3。
2) 宽字符字符串:每个字符占2个字节,采用UNICODE码。
A. 宽字符类型wchar_t:实际是unsigned short类型,
取值范围从0到65536,相应的字符串字面值需要加“L”。
B. 支持wchar_t类型的字符串函数:wcslen、wprintf,等等。
如:
wchar_t wsText[] = L"Hello World";
wprintf (L"%s, %u, %u\n",wsText, wcslen (wsText), sizeof (wsText));
注意:字符串长度不同于字符串的字节数。
宽字符字符串同样要以空字符结尾,宽字符的空为wchar_t类型的0,即两个0字节。
3) 同时支持多字节(MBCS/DBCS)字符串和宽字符(UNICODE/UCS-2)字符串的代码。
系统头文件tchar.h中包含类似下面的代码:
#ifdef _UNICODE
typedef wchar_t TCHAR;
#define _T(x) L##x
#define _tcslen wcslen
#define _tprintf wprintf
...
#else
typedef char TCHAR;
#define _T(x) x
#define _tcslen strlen
#define _tprintf printf
...
#endif // _UNICODE
同时支持多字节和宽字符的代码:
#include <tchar.h>
TCHAR szText[] = _T ("Hello World");
_tprintf (_T ("%s, %u, %u\n"),szText, _tcslen (szText), sizeof (szText));
Project/Settings.../C/C++/Preprocessor definitions中的预定义宏:
_MBCS表示多字节,_UNICODE和UNICODE表示宽字符。
4) UNICODE编码的汉字打印
A. 汉字的UNICODE编码范围从0x4E00到0x9FA5,共20902个字符。
B. wprintf对UNICODE编码的汉字字符打印的支持不够完善。
C. 用WriteConsoleW函数打印UNICODE编码的汉字。
输出字符串到标准输出:
BOOL WINAPI WriteConsoleW (HANDLEhConsoleOutput,// 标准输出句柄(类似标准I/O流的stdout指针)const VOID* lpBuffer,// 输出内容缓冲区DWORDnNumberOfCharsToWrite, // 输出内容的字符数(不是字节数)LPDWORDlpNumberOfCharsWritten, // 实际输出的字符数LPVOIDlpReserved// 保留,NULL
);
成功返回TRUE,失败返回FALSE。
获取标准句柄:
HANDLE WINAPI GetStdHandle (DWORD nStdHandle
);
STD_INPUT_HANDLE - 标准输入句柄
STD_OUTPUT_HANDLE - 标准输出句柄
STD_ERROR_HANDLE - 标准出错句柄
成功返回相应的句柄,失败返回INVALID_HANDLE_VALUE。
写个例子:
// WinChar.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
void CChar (void)
{// 普通charchar szText[] = "C character";printf ("%s\n", szText);
}
void ASCIIChar (UINT uCodePageID = 0)
{// ASCIIif (uCodePageID > 0)SetConsoleOutputCP (uCodePageID);//设置代码页for (int i = 0; i < 256; ++i)// 打印字符集printf ("%3d : %c\n", i, i);
}
void GBKChar (void)
{// GBKchar szText[] = "天下无敌";
// char szText[] = "withoutcompare";printf ("%s\n", szText);printf ("%s\n", szText+1);printf ("%u\n", strlen ("今天是2014年7月20日")); // 12
}
void UCS2Char (void)
{ UNICODE
// wchar_t szText[] = L"C Language";wchar_t szText[] = L"C 语言";/*printf ("%s, %u, %u\n",(char*)szText, strlen ((char*)szText),sizeof (szText));*//*wprintf (L"%s, %u, %u\n",szText, wcslen (szText),sizeof (szText));*/HANDLE hOutput = GetStdHandle (STD_OUTPUT_HANDLE);WriteConsoleW (hOutput, szText, wcslen (szText),NULL, NULL);
}
void TChar (void)
{/*char szText[] = "T character";printf ("%s, %u, %u\n", szText,strlen (szText), sizeof (szText));*//*wchar_t szText[] = L"T character";wprintf (L"%s, %u, %u\n", szText,wcslen (szText), sizeof (szText));*/TCHAR szText[] = _T("T character");_tprintf (_T("%s, %u, %u\n"), szText,_tcslen (szText), sizeof (szText));
}
void PrintHan (void)
{// 打印所有汉字HANDLE hOutput = GetStdHandle (STD_OUTPUT_HANDLE);for (WCHAR wcHan = 0x4E00; wcHan <= 0x9FA5; ++wcHan)WriteConsoleW (hOutput, &wcHan, 1, NULL, NULL);printf ("\n");
}
int main (int argc, char* argv[])
{
// CChar ();
// ASCIIChar (437);
// ASCIIChar (936);
// ASCIIChar ();
// GBKChar ();
// UCS2Char ();
// TChar ();PrintHan ();return 0;
}
字符编码--字符与数字的对应相关推荐
- 80-20-010-原理-字符编码-字符编码
AscII (American Standard Code for Information Interchange, 美国信息交換棕准代碍) . 7 bit来表示-个字符,共汁可以表示128神字符. ...
- php %3cphp用大括号表示,整理HTML5中支持的URL编码与字符编码_html5教程技巧
URL 编码URL 编码就是将 URLs 中不宜打印的字符或者具有特殊意义的字符转换为 Web 浏览器和服务器明白且普遍接受的表示法. 这些字符包括: ASCII 控制字符 - 不宜打印的字符通常用于 ...
- 深入理解Python字符编码--转
http://blog.51cto.com/9478652/2057896 不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError ...
- python3随记——字符编码
1.1什么是字节 字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符. 比特(bit)在计算机中最小的单位,在二进制位的电脑的系统中,每一b ...
- ansi编码_Java 字符编码
点击上方蓝字关注我们! 作者介绍 王云静,Java 开发工程师,2018 年 7 月加入去哪儿网,目前在目的地 - 呼叫中心.曾获得过 ACM 亚洲区域赛铜牌. ----- 基本概念 字符集 字符(C ...
- char类型与字符编码
本文要点: java的内码为UTF-16: char类型无法处理所有的字符,String的length方法和charAt方法也无法处理所有的字符: MySQL中,使用utf8编码的表无法存储表情,需要 ...
- 字符集(Character Set)和字符编码(Character Encoding)
计算机字符编码 字符:是各种文字和符号的总称,包括各个国家的文字,标点符号,图形符号,数字等. 字符集(Character Set.Charset):字符集是多个符号的集合,每个字符集包含的字符个数不 ...
- python中二进制和文本不同_关于Python字符编码与二进制不得不说的一些事
二进制 核心思想: 冯诺依曼 + 图灵机 电如何表示状态,才能稳定? 计算机开始设计的时候并不是考虑简单,而是考虑能自动完成任务与结果的可靠性, 简单始终是建立再稳定.可靠基础上 经过尝试10进制,但 ...
- 第三天:字符编码和文件处理
字符编码 什么是字符编码 字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式.自然数序列.8位组或者电脉冲),以便文本在计算机 ...
最新文章
- 特征工程之时间特征、自然语言特征、图像图像特征、数据分布不平衡
- RocketMQ与Kafka对比(18项差异)
- 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
- 【Java】6.1 Java 8增强的包装类
- Python函数式编程简介(一)高阶函数
- Spring MVC教程
- vue element项目常见实现表格内部可编辑功能
- C语言之strstr函数
- 51Nod-1126 求递推序列的第N项【递推序列+模除】
- 家谱处理 (30 分)(map映射)
- USBoot /WinHex恢复故障U盘的数据文件
- Virtual Private Network(虚拟专用网络)详解
- 给初学者的RxJava2.0教程(八)
- 我对移动端架构的思考
- 1.2 webstorm设置pug自动编译
- Android 跳转到高德、百度、腾讯地图进行导航
- 深入浅出matplotlib(96):标记的疏密控制
- web项目中上传的图片项目重新部署之后被清空如何解决?
- ubuntu16.04 titan rtx 24g +显卡驱动+cuda10.1+cudnn环境配置
- 解决WSL2与Proxifier无法同时使用的问题
热门文章
- RedHat Linux 9.0 安装教程(全程图解)
- 蜜趣疑似机器人_《凤囚凰》关晓彤宋威龙同房再添蜜趣
- ISO 21434概述中文简介总结版
- EtherCAT源代码分析(1)
- python如何替换文件部分内容_python 实现批量替换文本中的某部分内容
- Win10 添加映射网络驱动器出现无法连接网络解决方案
- 广州市天河区2021-2022学年九年级第一学期期末考试英语试题
- 信息技术领域排名增速第一, 再登中国500强!陌陌做对了什么?
- 遥感ENVI5.1辐射定标以及大气矫正
- 荣耀折叠屏手机如何超越华为?与三星合作就行