大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
之前一直对Unicode、ANSI、ASCII、UTF-8、string、wstring的概念混淆不清,今天特地查询资料整理下。
ANSI编码
ANSI编码和Unicode编码都是字符代码的一种表现形式。也就是一个字符既可以编码ANSI也可以编码成Unicode,只是表现形式不一样罢了。
首先来看下ANSI的全称:American National Standard Institute,美国国家标准协会。
虽然名字是美国的,但是不同国家和地区制定了相应不同的标准,由此产生了GB2312、GBK(简体中文的ANSI编码)、Big5、Shift_JIS(日文的ANSI编码)等各自的编码标准,这些使用1~4个字节来代表一个字符的各种外文字符延伸编码方式,称为ANSI编码。可以看出不同的ANSI码相互之间并不兼容,无法将两种相同的语言的文字,存储在同一段ANSI编码的文本中。
ANSI编码的特点
对于ANSI编码而言,0x00~0x7F
之间的字符,依旧是1个字节代表一个字符,而这之外的字符通常是使用0x80~0xFF
范围内的两个字节来表示一个字符。比如汉字找那个的’中’在简体中文中使用[0xD6, 0xD0]这两个字节存储。
这一点是Unicode编码和ANSI编码之间最大的不同。Unicode编码都是两个字节表示一个字符。
ASCII码
由美国国家标准协会制定,全称:American Standard Code for Information Interchange,美国标准信息交换码。其使用7位二进制数共128个组合来表示所有的大写和小写字母、数字0~9、标点符号以及在美式英语中使用的特殊控制字符。
由于ASCII码字符有限,所以现在也存在扩展的ASCII码
,也就是8位ASCII码。
Unicode编码
Unicode字符集编码全称:Universal Multiple-Octet Coded Character Set,通用多八位编码字符集。Unicode字符集是国际组织制定的可以容纳世界上所有文字和符号的编码方案。
Unicode编码为每个字符设定了同一并且唯一的二进制编码,以满足跨平台、跨语言进行文本转换、处理的要求。Unicode标准始终使用十六进制数字。
但是Unicode只是一个符号集
,之规定了符号的二进制代码,却没有规定这个二进制代码该怎么存储。
UTF-8编码
UTF-8全称:8bit Unicode Transformation Format,8比特Unicode通用转换格式。UTF-8是一种针对Unicode的可变长度字符编码。可以表示Unicode标准中的任何一个字符,且其编码中的第一个字节仍然与ASCII兼容。
UTF-8用1~4字节对Unicode进行编码。对于0x00~0x7F之间的编码与ASCII编码完全相同。
string和wstring
basic_string
string是basic_string在char上的实例化,wstring是basic_string在wchar_t上的实例化。
char wchar_t
char是窄字符,为1个Byte,wchar_t是宽字符,在Linux上为4Bytes,在Windows上为2Bytes。
char和wchar_t是否和Unicode有关?
Linux上,string一般以UTF-8格式编码。在Linux情况下,应该使用string。
Windows上,如果应用程序使用char,这些char string将会使用本地charset/codepage上的形式显示在显示器上;如果是Unicode-based应用程序,Windows使用wchar_t——2bit宽,使用UTF-16编码。
应用程序使用char为Multibyte,因为每个glyph由一个或多个char组成;使用wchar_t为widechar,因为每个glyph由一个或两个wchar_t组成。(详情请见MultiByteToWideChar和WideCharToMultiByte API函数)
在Window上,除非使用了GTK+或者QT这样的框架,否则你应该使用wchar_t。事实上,Windows对wchar_t其作用,所以使用char的应用程序,他们的char string都会被转化为wchar_t string。
string和wstring对比
- Linux总是使用string,而Windows上总是使用wstring,需要跨平台看toolkit
- 待整理
博客原文地址:http://jerkwisdom.github.io/code/common/unicode-and-ansi/
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190269.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...