学习:多字节编码(ANSI)和UNICODE编码的关系

Windows 既可以使用 Unicode 字符集又可以使用传统的字符集(如多字节编码)来实现对多种语言的支持,以适应国际市场的要求。与传统的字符集编码相比,Unicode 是世界通用的字符编码标准,使用 16 位数据表示一个字符,一共可以表示 65535 种字符,可以包括现代计算机中所使用的所有字符,包括各种字母、文字、在出版业中使用的特殊符号等。

ANSI编码:
1、每种 ANSI 字符集只规定自己国家或地区使用的语言所需的'字符',比如简体中文编码标准 GB-2312 的字符集中就不会包含韩国人的文字。
2、ANSI 字符集的空间都比 ASCII 要大很多,一个字节已经不够,绝大多数 ANSI 编码标准都使用多个字节来表示一个字符,例如一个字节是负数,则将其后续的一个字节组合在一起表示一个字符。这种编码方式的字符集也称作"多字节"字符集。
3、ANSI 编码标准一般都会兼容 ASCII 码。

Unicode编码:
1、统一所有的字符使用两个字节来存放
2、将所有国家的语言都放到一个字符集里

Unicode的产生是为了解决许多8位无法标识的东西。

在 Windows 系统中,Unicode 字符编码和多字节字符编码都可以使用。

示例代码:

#include<windows.h>


int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){
	//const TCHAR * str = TEXT("123");
	//TCHAR c[] = TEXT("提示框:");
	//MessageBox(NULL, str, c, MB_OK);
	//LPCWSTR szUnicode = L"This is a Unicode String;"; //LPWSTR类型是wchar_t *
	//而 L"This is a Unicode String;" 的类型是 const wchar_t[26],它可以隐式转化为 const wchar_t *,但不可能隐式转化为 wchar_t *

	//定义LPCWSTR 类型的宽字符串
	LPCWSTR szUnicode = L"This is a Unicode String;"; 
	////定义LPCSTR 类型的窄字符串
	LPCSTR szMutliByte = "This is not a Unicode String;";
	//定义LPCTSTR 类型的自适用字符串
	LPCTSTR szString = TEXT("This string is Unicode or not depends on the option.");
	
	//TCHAR a[] = TEXT("123"); //TEXT就是为L进行修饰  如果为UNICODE的话 那么这里的TCHAR就是WCHAR也就是wchar_t
	//TCHAR * b = "123"; //如果不是UNICODE的话 那么TCHAR就是char
	

	//使用W 版本的API 函数,以宽字符串为参数
	MessageBoxW(NULL, szUnicode, L"<字符编码1>", MB_OK);
	//使用A 版本的API 函数,以窄字符串为参数
	MessageBoxA(NULL, szMutliByte, "<字符编码2>", MB_OK);
	//根据编译条件自动选择A 版本或W 版本的API 函数,采用相适应的字符串类型为参数
	MessageBox(NULL, szString, TEXT("<字符编码3>"), MB_OK);
	
	return 0;
}


原文地址:https://www.cnblogs.com/zpchcbd/p/11901279.html