字符编码基本介绍

基础概念

  • 字符

     任何一个文字或符号都是一个字符,不同的编码导致一个字符所占的内存不同。
    
  • 字符集

     字符的集合就叫字符集。
    
  • 字符编码(charset encoding,简写为 encoding)

     1. 定义字符集中的字符如何编码为特定的二进制数。
     2. 字符集和字符编码一般一一对应,GBK 字符集对应 GBK 编码,
     3. ASCii 字符集对应 ASCii 编码。
     4. Unicode 字符集有 UTF-8、UTF-16 和 UTF-32 三种编码方式。
    

编码介绍

  • Unicode编码

    Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

  • UTF-8
    它并不是字符集,UTF-8就是在互联网上使用最广的一种Unicode的实现方式。UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
    UTF-8的编码规则很简单,只有二条:
    1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。ASCII码表示英文,范围0-127,用7位表示。

使用

  • 计算机里面怎么使用编码
    1)在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
    2)场景:
    用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。
    3)拓展:
    记事本默认保存的编码是ANSI,ANSI也叫多字节字符集,ANSI其实不是一种编码方式,是所有使用不定长字节来表示字符的编码格式的统称,在简体中文Windows操作系统上,ANSI指的是GBK编码,在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 JIS 编码。当然你用可以更改记事本的保存格式。Unicode同理,Unicode是一个字符集,不是一个编码方式,在windows这边,Unicode指的是UTF-16,在其他环境下,可能指的是UTF-8或UTF-32,比如linux上指的是utf-8.

  • 文件编码与程序编码
    1)文件编码是你当前在编辑源代码时,代码里的字符串是以什么样的编码存储,这也是为什么很多人在windows上写的代码到linux下进行编译就会出现乱码以及编译器无法解析的字符串,一些莫名其妙的问题。
    2)程序编码是程序运行之后在处理字符串时所使用的编码。
    vs设置程序编码:
    Visual Studio 默认编码为utf-8。
    字符编码基本介绍_第1张图片

  • QString编码方式和中文乱码解决方法
    1)QString的内部编码方式是unicode,utf-16编码,当char* 或std::string 转换成-QString时,默认char* 或std::string的编码方式为UTF-8。
    2)中文乱码:qt中的fromLocal8Bit()函数可以设置编码;可以实现从本地字符集GB到Unicode的转换,从而处理汉语显示乱码等问题。windows默认使用(GBK/GB2312/GB8030)。

QString str2qstr(const string str)
{
    return QString::fromLocal8Bit(str.data());
}

string qstr2str(const QString qstr)
{
    QByteArray cdata = qstr.toLocal8Bit();
    return string(cdata);
}

你可能感兴趣的:(c++)