在没有UNICODE之前,美国人发明了计算机,因为他们用的是英语,所以采用ASCII编码基本ASCII码可以包含[0-128)个字符,基本上囊括了所有的英文字母。然后扩展ASCII码[128-255]又可以表示英文的制表符、部分音标等等其他的一些符号,足够满足计算机使用了。 随着时间的推移计算机发展到了世界,ASCII处理英文自然是没有问题,但是处理中文、日文、阿拉伯文,就力不从心了,于是各个国家开始定义自己的编码规范,我们中文就是GB2312-80,其实就是利用扩展ASCII没有真正标准化这一点,用两个扩展ASCII码代表一个中文字符65536自然也就够用了。但是问题还是有的,比如很多软件利用扩展ASCII码来画表格,这种扩展ASCII码软件到中文系统中就会被误认为中文,产生乱码。
于是UNICODE应运而生了,他用两个字节表示一个字符,当然他只是用两个字节空间存储一个字符一种编码方式。所有的字符(中文、英文、日文)都被2个字节处理。
- 使用UNICODE的好处
支持多种语言有利于程序国际化。
winnt内部使用UNICODE编码,如果你的程序调用WINAPI传进去的是ASCII的话winnt会首先把UNICODE->ASCII.反之。可见用UNICODE不需要进行转换,提高了程序效率。
- C++对UNICODE的支持
ANSI C对宽字符的支持,
宽字符的定义
typedef unsigned short wchar_t;
常量宽字符串
wchar_t *str1=L" Hello";
宽字符串库函数
size_t __cdel wcslen(const wchar_t*);
ANSI/Unicode通用编程
tchar.h的部分摘抄
#ifdef _UNICODE
typedef wchar_t TCHAR;
#define __T(x) L##x
#define _T(x) __T(x)
#else
#define __T(x) x
typedef char TCHAR;
#endif
- win32 api对UNICODE的支持
宽字符的定义(winnt.h)
typedef char CHAR;
typedef unsigned short WCHAR; // wc, 16-bit UNICODE character
typedef CONST CHAR *LPCSTR, *PCSTR;
ANSI/Unicode通用编程
#ifdef UNICODE
typedef WCHAR TCHAR, *PTCHAR;
typedef LPWSTR LPTCH, PTCH;
typedef LPWSTR PTSTR, LPTSTR;
typedef LPCWSTR LPCTSTR;
#define __TEXT(quote) L##quote // r_winnt
#else /* UNICODE */ // r_winnt
typedef char TCHAR, *PTCHAR;
typedef LPSTR LPTCH, PTCH;
typedef LPSTR PTSTR, LPTSTR;
typedef LPCSTR LPCTSTR;
#define __TEXT(quote) quote // r_winnt
#endif /* UNICODE */ // r_winnt
- 使用 C++和WIN32 API进行UNICODE编程
ANSI操作函数以str开头,如strcpy(),strcat(),strlen();
Unicode操作函数以wcs开头,如wcscpy,wcscpy(),wcslen();
ANSI/Unicode操作函数以_tcs开头 _tcscpy(C运行期库);
ANSI/Unicode操作函数以lstr开头 lstrcpy(Windows函数);
考虑ANSI和Unicode的兼容,我们需要使用以_tcs开头或lstr开头的通用字符串操作函数。
- 创建VC 6.0的UNICODE工程
VC 6.0默认使用ANSI,在Project ->Settings里面
修改两个地方
1.将于处理器定义(Preprocessor definitions)删除_MBCS,加上_UNICODE,UNICODE(中间用逗号隔开)。
2.将函数入口点更改为wWinMainCRTStartup。
- 注:平时写程序多用通用(ANSI/UNICODE)的函数。使用_T宏,使用UNICODE编码。例如MessageBox(_T("你好"));
相关推荐
需要注意的是,ASCII编码的所有字符都能直接映射到Unicode的前128个字符,因此在大多数情况下,ASCII到Unicode的转换是无损的。但是,如果ASCII字符串包含非ASCII字符(例如,特殊符号或非英文字符),则必须确保...
《ASCII与Unicode转换工具v2.3.3详解》 在计算机世界中,字符编码扮演着至关重要的角色,它使得计算机能理解和处理人类语言。ASCII和Unicode是两种广泛使用的字符编码标准,它们各自有着独特的特点和应用场景。...
标题提到的"易语言4行代码实现ASCII转Unicode"是指使用易语言这一中国本土化的编程语言,通过简短的代码来完成ASCII编码到Unicode编码的转换。易语言以其简单易学的特点,为初学者和专业开发者提供了方便。接下来,...
本话题主要关注两种常见的字符编码标准:ASCII和Unicode,以及它们之间的转换工具。 ASCII,全称美国信息交换标准代码(American Standard Code for Information Interchange),是最早广泛使用的字符编码系统之一...
在易语言中,转换ASCII到Unicode主要涉及两个步骤:首先,将ASCII字符串的每个字符转换为其对应的Unicode值,然后将这些值表示为Unicode字符。由于ASCII是Unicode的一个子集,ASCII字符的Unicode值与ASCII码相同。...
ASCII(美国标准信息交换代码)和UNICODE(统一码)是两种广泛使用的字符编码标准,它们各自有着不同的历史背景、设计目标和适用范围。 ASCII编码,全称为American Standard Code for Information Interchange,是...
浮点数转换为十六进制(HEX)和ASCII字符转换为UNICODE是计算机编程中的常见操作,尤其在处理数据存储、传输或者解析时尤为重要。本文将深入探讨这两个概念及其在Delphi编程语言中的实现。 首先,让我们了解浮点数...
在IT领域,字符编码是处理文本数据的基础,而ASCII与Unicode是两种常见的字符编码标准。本文将深入探讨ASCII到Unicode的转换,以及涉及到的相关技术,如UTF-16和unescape函数。 首先,ASCII(美国信息交换标准代码...
在本压缩包"TharConvert.zip_arc_ascii_ascii to unicode_unicode_unicode ascii"中,包含的源程序和文档可能涉及了将ASCII编码转换为Unicode编码,以及反过来将Unicode转换为ASCII的过程。下面将详细解释这些概念和...
在"易语言4行代码实现ASCII转Unicode"的项目中,我们关注的核心知识点是如何在易语言中用极少量的代码实现字符编码的转换。 ASCII(美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,最初只使用7位二进制...
本项目涉及的核心知识点是ASCII码和Unicode码的相互转换,这对于短信类程序设计尤其有用,因为这类程序需要处理各种语言的字符,确保信息能够正确地编码、传输和解码。 首先,ASCII(美国标准信息交换代码)是一种...
标题中的“16进制ascii码Unicode转换工具”是指一种软件或在线服务,它能够帮助用户将16进制表示的ASCII编码转换为Unicode编码,反之亦然。这个工具的独特之处在于它支持同步输入和批量转换,使得处理大量数据变得...
vc编程将ascii码和unicode码的进行自由转换vc编程将ascii码和unicode码的进行自由转换vc编程将ascii码和unicode码的进行自由转换vc编程将ascii码和unicode码的进行自由转换vc编程将ascii码和unicode码的进行自由转换
### 字符编码笔记:ASCII,Unicode和UTF-8 #### 1. ASCII码 ASCII码是上个世纪60年代由美国制定的一套字符编码标准,用于规定英语字符与计算机内部二进制位之间的关系。在计算机内部,信息通常以二进制形式存在,...
在C++中,理解并掌握ASCII、UNICODE和UTF-8之间的转换对于开发跨平台、多语言兼容的软件至关重要。本文将详细探讨这些编码标准以及如何在C++中进行它们之间的转换。 首先,ASCII(American Standard Code for ...
ASCII、Unicode、GBK和UTF-8字符编码的区别联系
ASCII_UNICODE_UTF8字符串互相转换的C++代码ASCII_UNICODE_UTF8字符串互相转换的C++代码ASCII_UNICODE_UTF8字符串互相转换的C++代码ASCII_UNICODE_UTF8字符串互相转换的C++代码ASCII_UNICODE_UTF8字符串互相转换的...
ASCII码随心换,可随意转换为unicode,十六进制,十进制字符