必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

一般遇到这种情况我们想到的可能是编码问题,

2019-09-21 22:33 来源:未知

1.一个字符串是一个不可改变的字节序列
2.文本字符串通常被解释为采用UTF8编码的Unicode码点序列
3.内置的len函数可以返回一个字符串中的字节数目
4.第i个字节并不一定是字符串的第i个字符,因为对于非ASCII字符的UTF8编码会要两个或多个字节
5.字符串操作基于原始字符串字节
6.字符串面值方式编写,只要将一系列字节序列包含在双引号内即可,解释字符串,其中的相关的转义字符将被替换;反引号括起来,支持换行,非解释字符串
7.每个符号都分配一个唯一的Unicode码点,Unicode码点对应Go语言中的rune整数类型
8.UTF8是一个将Unicode码点编码为字节序列的变长编码
9.变长的编码无法直接通过索引来访问第n个字符
10.将字符串看作是字节的切片来实现对其标准索引法的操作

go语言圣经-复数

图片 1

0 前言

在平时的开发过程中大部分人应该都遇到过中文乱码问题,浏览网页时也会遇到内容显示乱码的情况,一般遇到这种情况我们想到的可能是编码问题。那我们说的编码具体是指什么,乱码问题的根本原因是什么,又该如何解决呢?
答案的关键就是本文接下来要介绍的字符集与字符编码。

本文希望解答以下几个问题:

  • 什么是字符集,ASCII码、unicode、UTF-8、GB2312、GBK 之间有什么区别?
  • 给定一个字符串,如何检测其编码类型
  • 如此多的字符集,平时改怎么选用合适的?
  • 字符编码之间如何转换?
  • 对于mysql,表、字段都有字符集,如何统一选中哪种?
  • mysql的utf8mb4是uft8有何区别
  • mysql中默认的lantin1字符集又是什么字符集?
        b:="你好"        fmt.Println//输出6,返回的是字节数目        fmt.Println(string//输出 你,子字符串操作基于原始字符串字节        //b[0]='a' //字符串的不可变性,这里会报错        c:="hello"        fmt.Println//输出5,acsii码的是一个字节一个字符        fmt.Println(string//输出 l,可以使用标准索引法获取        d:=[]byte        d[0]=byte        fmt.Println)//输出 wello,将字符串看作是字节的切片来实现对其标准索引法的操作

1.我们把形如a+bi的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位。两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度

charset

1 概述

首先介绍一下字符,字节,字符串,字符集和字符编码等基本概念。

  1. 字符(Character): 各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
  2. 字节(Byte): 计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。
  3. 字符串(string): 一个连续的字符序列,在存储上类似于字符数组。
  4. 字符集(Character Set): 多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。
  5. 字符编码(Character encoding): 也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。
  6. 单字节字符集(Single Byte Character Set, SBCS): 所有字符都只用一个字节表示。用一个字节表示的0来标志SBCS字符串的结束。
  7. 多字节字符集(Multi-Byte Character Set, MBCS):部分字符用一个字节表示,部分字符用两个或更多字节表示。Windows中的MBCS包含两种字符,单字节字符(Single-Byte Characters)和双字节字符(Double-Byte Characters)。有一些特定的值被保留用来表明它们是双字节字符的一部分。MBCS字符串也使用单字节的0来标志字符串结束。
  8. Unicode字符集: 通常又称为宽字符集(Wide Character Set),所有字符都用两个字节来表示。 注意,不要混淆Unicode字符集与MBCS,Unicode字符串采用两个字节表示的0作为结束标志。

常见的字符集有:ASCII字符集、GB2312字符集、GBK字符集、Big5字符集、GB18030字符集、Unicode字符集等。

一般情况下一个字符集对应一种字符编码,但是Unicode比较特殊,存在多种字符编码标准,比如:UTF-7,UTF-8,UTF-16,UTF-32等。

根据各个字符集的特性及发展历程可以将其划分成三类,如下图所示:

图片 2

常见字符集及字符编码

上图中只列举了几种常见的字符集与字符编码,更多内容请参阅字符编码。

注意: 平时与人沟通的时候要弄清楚自己说的是字符集还是字符编码,尤其是在谈论Unicode的时候。

ASCII码、unicode、UTF-8、GB2312、GBK 四者有什么区别?

  

2.complex函数用于构建复数,real和imag函数分别返回复数的实部和虚部

字符编码(Character encoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。

2 ASCII

  • ASCII(American Standard Code for Information Interchange,美国信息互换标准编码)是基于罗马字母表的一套电脑编码系统。
  • 包含了英文大小写字符、阿拉伯数字和西文符号等可显示字符以及回车键、退格、换行键等控制字符。
  • 主要用于显示现代英语和其他西欧语言,是现今最通用的单字节编码系统,并等同于国际标准ISO 646。
  • 基本字符集采用7位(bits)表示一个字符,共128个字符,字符值从0到127,其中32到126是可打印字符。
  • 扩展字符集采用8位(bits)表示一个字符,共256个字符,增加了表格符号、计算符号、希腊字母和特殊的拉丁符号,可以表示更多的欧洲常用字符。
ASCII码

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。
ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
但是对于非英语语言,128个字符远远不够容纳,比如常用汉字就有数万个。于是就延伸了其他的字符编码。

go语言圣经-布尔型

ASCII码##

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。
ASCII码一共规定了128个字符的编码,这128个符号,只占用了一个字节的后面7位,最前面的1位统一规定为0。

3 ANSI(GB2312, GBK, Big5, GB18030)

随着计算机的不断普及,原来的ASCII单字节编码已经无法满足世界各地的字符表示要求,于是,各个国家和地区都设计了一系列满足于本国和地区的字符集与字符编码。
以中国为例,为了满足国内计算机使用汉字的需求,中国国家标准总局发布了一系列的汉字字符集国家标准编码,统称为GB码,或国标码。

unicode

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。
可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。
Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字"严"。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。

注意:unicode约定了一种符号集,几乎囊括了所有符号,但不是一种具体存储的字符集。 下面要讲的utf-8就是其一种实现方式。

1.布尔值可以和&&和||操作符结合,并且有短路行为

Unicode##

Unicode是为了解决传统的字元编码方案的局限而产生的,它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。Unicode出现的问题:一个是字符解析问题;另外一个就是字符存储问题(字节浪费);

3.1 GB2312

GB2312是一个简体中文字符集,采用了二维矩阵编码法对所有字符进行编码:

  1. 首先构造一个94行94列的方阵,对每一行称为一个“区”,每一列称为一个“位”,
  2. 然后将所有字符依照下表的规律填写到方阵中。
分区范围 符号类型
第01区 中文标点、数学符号以及一些特殊字符
第02区 各种各样的数学序号
第03区 全角西文字符
第04区 日文平假名
第05区 日文片假名
第06区 希腊字母表
第07区 俄文字母表
第08区 中文拼音字母表
第09区 制表符号
第10-15区 无字符
第16-55区 一级汉字(以拼音字母排序)
第56-87区 二级汉字(以部首笔画排序)
第88-94区 无字符

这样所有的字符在方阵中都有一个唯一的位置,这个位置可以用区号、位号合成表示,称为字符的区位码。

GB2312编码采用两个字节表示一个汉字,区码和位码分别占用一个字节。由于区码和位码的取值范围都是在1-94之间,同西文的存储表示冲突。为了与西文进行区别,存储时将区位码的每个字节分别加上A0H(160)转换为存储码。以汉字“啊”为例,区位码为1601(1001H),存储码为B0A1H,转换过程如下:

区位码 区码转换 位码转换 存储码
1001H 10H+A0H=B0H 01H+A0H=A1H B0A1H
UTF-8

UTF-8就是在互联网上使用最广的一种Unicode的实现方式。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:一般遇到这种情况我们想到的可能是编码问题,