计算机中编码方式---ASCII,ISO-8859-1以及UTF-8和UTF-16编码

本文介绍了计算机中不同编码方式,包括ASCII、ISO8859-1、GB2312、GBK/GBK18030、Unicode、UTF-8和UTF-16。重点讨论了它们的适用场景、编码规则以及解决多语言字符存储的问题。例如,ASCII码用于基础字符,GB2312和GBK解决了中文字符编码,而UTF-8和UTF-16则提供了更广泛的字符集支持。
摘要由CSDN通过智能技术生成

简介

在编程中经常会遇到的编码问题,例如乱码问题或者文本显示成??的形式.我们知道计算机是二进制的方式存储数据,要想将人类世界的文字和符号存储到计算机,就需要将数据”翻译”成计算机语言进行存储,显示的时候又”翻译”成人类可识的数据,那么中间是翻译的过程需要的”字典”就是编码表,也就是将计算机二进制和文字、符号映射.计算机中存储信息的最小单元是字节(byte),一个字节有8个二进制位(bit),每个二进制只有两种状态,0或者1表示.那么8个二进制位就是2的8次幂,结果是256种状态,二进制范围是从0000000011111111.

ASCII码

起初美国有关标准组织制定了一套编码叫ASCII码,用了一个字节低7位,最高位二进制位0,编码范围是00000000-0xxxxxxx,总共有128状态,表示了大小写字母,数字,标点符号以及特殊的控制字符.

0~31以及127(共33个)是控制字符,例如:LF(换行),CR(回车).

32~126(共95个)是字符,48~57为0到9共十个阿拉伯数字,65~122是大小的英文字母,其余的是字符,运算符等.

所以ACSII码编码的格式是0xxxxxxx.一个字节中除了ASCII编码外,剩余的位置还有128个状态,对于一些西欧国家,文字比较少,这些编码位置已经够用,但是对于汉字个数远多余128个,所以出现了其他编码方式.

ISO8859-1

别名是Latin1,Iso-8859-1编码是属于单字节的编码,即编码的范围是0到255.总共能表示256个字符,向下兼容了ACSII,也就是在ASCII编码的基础上扩展了127-255之间位置。编码范围是0x00-0xFF,涵盖了部分西欧的语言字符.由于和计算机的存储单元一样,应用比较广泛,例如在网络传输协议中和Mysql数据库默认的编码

GB2312

GB2312是中国国家标准总局在1980年发布,用于汉字处理,汉字通信等系统之间信息,主要编码的字符是简化汉字,以及常用字母和符号,中国大陆地区和新加坡等地广泛使用.总共收录字符有7445个,其中简化的汉字是6763,以及包含拉丁字母,希腊字母,日文平假名及片假名字母,俄语西里尔字母在内的全角字符有682个.

GB2312对收录的字符进行了分区处理,共有94个区,每个区有94个字符,这种表示字符的方式叫区位码.例如下面01区和02区. 

每个区具体的分布的字符如下:

区号

编码总数

表示的符号

01

94

一般符号

02

72

顺序号码

03

94

拉丁字母

04

83

日文假名

05

86

Katakana

06

48

希腊字母

07

66

俄文字母

08

63

汉语拼音符号

09

76

图形符号

10-15

0

没有编码

16-55

3755

一级汉字,以拼音为序

56-87

3008

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UTF-8编码的字符串转换为ASCII编码的字符串需要进行字符集转换。在C++,可以使用一些第三方库来完成字符集转换,例如iconv、libiconv或Boost.Locale等。这里以使用Boost.Locale库为例,介绍如何将UTF-8编码的字符串转换为ASCII编码的字符串。 首先,需要在C++项目引入Boost.Locale库。具体的引入方法可以参考Boost官方文档。 然后,可以使用Boost.Locale库提供的utf_to_utf函数将UTF-8编码的字符串转换为UTF-32编码的字符串,例如: ```cpp #include <boost/locale.hpp> #include <string> std::string utf8_to_ascii(const std::string& utf8str) { std::wstring utf32str = boost::locale::conv::utf_to_utf<wchar_t>(utf8str); std::string ascii_str; for (wchar_t c : utf32str) { if (c < 128) { ascii_str += static_cast<char>(c); } } return ascii_str; } ``` 在上面的代码,首先使用`boost::locale::conv::utf_to_utf`函数将UTF-8编码的字符串转换为UTF-32编码的字符串,然后遍历UTF-32编码的字符串,将ASCII编码的字符添加到一个新的字符串,并返回该字符串。 需要注意的是,由于ASCII编码只能表示128个字符,因此在将UTF-32编码的字符串转换为ASCII编码的字符串时,可能会丢失一些字符。在上面的代码,我们只将UTF-32编码的字符值小于128的字符转换为ASCII编码的字符,其他字符将被丢弃。如果需要保留所有字符,可以考虑使用其他编码方式,例如ISO-8859-1或Windows-1252等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值