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;
}

字符编码--字符与数字的对应相关推荐

  1. 80-20-010-原理-字符编码-字符编码

    AscII (American Standard Code for Information Interchange, 美国信息交換棕准代碍) . 7 bit来表示-个字符,共汁可以表示128神字符. ...

  2. php %3cphp用大括号表示,整理HTML5中支持的URL编码与字符编码_html5教程技巧

    URL 编码URL 编码就是将 URLs 中不宜打印的字符或者具有特殊意义的字符转换为 Web 浏览器和服务器明白且普遍接受的表示法. 这些字符包括: ASCII 控制字符 - 不宜打印的字符通常用于 ...

  3. 深入理解Python字符编码--转

    http://blog.51cto.com/9478652/2057896 不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError ...

  4. python3随记——字符编码

    1.1什么是字节 字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符. 比特(bit)在计算机中最小的单位,在二进制位的电脑的系统中,每一b ...

  5. ansi编码_Java 字符编码

    点击上方蓝字关注我们! 作者介绍 王云静,Java 开发工程师,2018 年 7 月加入去哪儿网,目前在目的地 - 呼叫中心.曾获得过 ACM 亚洲区域赛铜牌. ----- 基本概念 字符集 字符(C ...

  6. char类型与字符编码

    本文要点: java的内码为UTF-16: char类型无法处理所有的字符,String的length方法和charAt方法也无法处理所有的字符: MySQL中,使用utf8编码的表无法存储表情,需要 ...

  7. 字符集(Character Set)和字符编码(Character Encoding)

    计算机字符编码 字符:是各种文字和符号的总称,包括各个国家的文字,标点符号,图形符号,数字等. 字符集(Character Set.Charset):字符集是多个符号的集合,每个字符集包含的字符个数不 ...

  8. python中二进制和文本不同_关于Python字符编码与二进制不得不说的一些事

    二进制 核心思想: 冯诺依曼 + 图灵机 电如何表示状态,才能稳定? 计算机开始设计的时候并不是考虑简单,而是考虑能自动完成任务与结果的可靠性, 简单始终是建立再稳定.可靠基础上 经过尝试10进制,但 ...

  9. 第三天:字符编码和文件处理

    字符编码 什么是字符编码 字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式.自然数序列.8位组或者电脉冲),以便文本在计算机 ...

最新文章

  1. 特征工程之时间特征、自然语言特征、图像图像特征、数据分布不平衡
  2. RocketMQ与Kafka对比(18项差异)
  3. 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
  4. 【Java】6.1 Java 8增强的包装类
  5. Python函数式编程简介(一)高阶函数
  6. Spring MVC教程
  7. vue element项目常见实现表格内部可编辑功能
  8. C语言之strstr函数
  9. 51Nod-1126 求递推序列的第N项【递推序列+模除】
  10. 家谱处理 (30 分)(map映射)
  11. USBoot /WinHex恢复故障U盘的数据文件
  12. Virtual Private Network(虚拟专用网络)详解
  13. 给初学者的RxJava2.0教程(八)
  14. 我对移动端架构的思考
  15. 1.2 webstorm设置pug自动编译
  16. Android 跳转到高德、百度、腾讯地图进行导航
  17. 深入浅出matplotlib(96):标记的疏密控制
  18. web项目中上传的图片项目重新部署之后被清空如何解决?
  19. ubuntu16.04 titan rtx 24g +显卡驱动+cuda10.1+cudnn环境配置
  20. 解决WSL2与Proxifier无法同时使用的问题

热门文章

  1. RedHat Linux 9.0 安装教程(全程图解)
  2. 蜜趣疑似机器人_《凤囚凰》关晓彤宋威龙同房再添蜜趣
  3. ISO 21434概述中文简介总结版
  4. EtherCAT源代码分析(1)
  5. python如何替换文件部分内容_python 实现批量替换文本中的某部分内容
  6. Win10 添加映射网络驱动器出现无法连接网络解决方案
  7. 广州市天河区2021-2022学年九年级第一学期期末考试英语试题
  8. 信息技术领域排名增速第一, 再登中国500强!陌陌做对了什么?
  9. 遥感ENVI5.1辐射定标以及大气矫正
  10. 荣耀折叠屏手机如何超越华为?与三星合作就行