utf8&ascii编码

ASCII编码

  1. 将0000 0000 ~ 0111 1111编码成英文与一些控制字符,
  2. ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。标准 ASCII 码也叫基础ASCII码,使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。
  3. 在标准ASCII中,其最高位用作奇偶校验位。
  4. 所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中 1 的个数必须是奇数,若非奇数,则在最高位 添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位添1。
  5. 后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展 ASCII 码允许将每个字符的第 8 位用于确定附加的 128 个特殊符号字符、外来语字母和图形符号。

ASCII码表

ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符
0NUT32(space)64@96
1SOH3365A97a
2STX3466B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92/124|
29GS61=93]125}
30RS62>94^126~
31US63?95127DEL

扩展

十进制

十六进制

字符

十进制

十六进制

字符

128

80

Ç

192

C0

129

81

ü

193

C1

130

82

é

194

C2

131

83

â

195

C3

132

84

ä

196

C4

133

85

à

197

C5

134

86

å

198

C6

135

87

ç

199

C7

136

88

ê

200

C8

137

89

ë

201

C9

138

8A

è

202

CA

139

8B

ï

203

CB

140

8C

î

204

CC

141

8D

ì

205

CD

142

8E

Ä

206

CE

143

8F

Å

207

CF

144

90

É

208

D0

145

91

æ

209

D1

146

92

Æ

210

D2

147

93

ô

211

D3

148

94

ö

212

D4

Ô

149

95

ò

213

D5

150

96

û

214

D6

151

97

ù

215

D7

152

98

ÿ

216

D8

153

99

Ö

217

D9

154

9A

Ü

218

DA

155

9B

¢

219

DB

156

9C

£

220

DC

157

9D

¥

221

DD

158

9E

?

222

DE

?

159

9F

ƒ

223

DF

?

160

A0

á

224

E0

α

161

A1

í

225

E1

ß

162

A2

ó

226

E2

Γ

163

A3

ú

227

E3

π

164

A4

ñ

228

E4

Σ

165

A5

Ñ

229

E5

σ

166

A6

ª

230

E6

µ

167

A7

º

231

E7

τ

168

A8

¿

232

E8

Φ

169

A9

?

233

E9

Θ

170

AA

¬

234

EA

Ω

171

AB

½

235

EB

δ

172

AC

¼

236

EC

173

AD

¡

237

ED

φ

174

AE

«

238

EE

ε

175

AF

»

239

EF

176

B0

?

240

F0

177

B1

?

241

F1

±

178

B2

242

F2

179

B3

243

F3

180

B4

244

F4

?

181

B5

245

F5

?

182

B6

246

F6

÷

183

B7

247

F7

184

B8

248

F8

185

B9

249

F9

?

186

BA

250

FA

·

187

BB

251

FB

188

BC

252

FC

?

189

BD

253

FD

²

190

BE

254

FE

191

BF

255

FF

ÿ

unicode

  1. Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

  2. UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。

  3. 其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。

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

UTF-8编码

由于ASCII编码表示的字符太少了,所以各个国家都有一套自己的编码标准,比如中国的GB2312、GBK编码等。但是如果每个国家都用自己的标准,那么交流起来就很复杂,所以ISO组织就发明了UNICODE编码,UTF-8(每次传输8位)是UNICODE的一种,向下可兼容ASCII编码。

# 序列0开头表示兼容ASCII编码
00 - 7F:0xxxxxxx

# 序列110开头表示是两个字节编码的
80 - 7FF:110xxxxx 10xxxxx

# 序列1110开头表示是三个字节编码的
800 - FFFF:1110xxxx 10xxxxxx 10xxxxxx

# 序列11110开头表示是四个字节编码的
10000 - 10FFFF:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

序列10开头表示是编码字节的组成部分

实例:utf8转中文

# 给出字节序列如下
11100101 10010000 10001000 11101000 10000010
10100101 11100101 10110111 10100101 11100100
10111000 10011010 11100101 10100100 10100111
11100101 10101101 10100110

# 由于开头都是1110组成,所以都是由三个字节编码的
0101 010000 001000
1000 000010 100101
0101 110111 100101
0100 111000 011010
0101 100100 100111
0101 101101 100110

# 16进制
0101 0100 0000 1000 -> 0x5408 
1000 0000 1010 0101 -> 0x80a5
0101 1101 1110 0101 -> 0x5de5
0100 1110 0001 1010 -> 0x4e1a
0101 1001 0010 0111 -> 0x5927
0101 1011 0110 0110 -> 0x5b66

对应utf8表即可(utf8表过长,不再展示)
在这里插入图片描述

python 2.7 如何判断 Unicode 编码字符是否为汉字,如何判断unicode编码句子中是否含有汉字

对于计算机来说,一切都是 0 1 组成的数字,汉字也不例外。因此对于 python 来说,汉字也是可以比较大小的,所以,判断一个 unicode字符是否汉字,只需要判断该字符是否在第一个汉字和最后一个汉字之间即可。

查阅资料,发现对于Unicode编码的汉字,最小为\u4e00,最大为 \u9fa5,所以,自然的,python 判断一个Unicode字符是否为汉字的代码可以如下写:

def IsChineseChar(uchar):
    if uchar >= u'\u4e00' and uchar<=u'\u9fa5':
        return True
    return False

测试:

print IsChineseChar(u'A'),  IsChineseChar(u'我')

发现符合预期:

# python t.py 
False True

进一步的,如果想用python判断一句unicode编码的话中是否含有中文,代码可以如下写:

def IsChineseCharInside(sentence):
        for uchar in sentence:
                if uchar >= u'\u4e00' and uchar<=u'\u9fa5':
                        return True
        return False

Golang中对是否是中文字符的判断方法

方法一

首先是用到的两个函数(截图来自 - Go语言中文网 https://studygolang.com/pkgdoc)
在这里插入图片描述
接下来是代码:

package main

import (
	"fmt"
	"regexp"
)

//注释解释的是上一行的代码
func main() {
	str := "!@#中国123"
	//设定一个含有中文的字符串
	var a = regexp.MustCompile("^[\u4e00-\u9fa5]$")
	//接受正则表达式的范围
	for i, v := range str {
		//golang中string的底层是byte类型,所以单纯的for输出中文会出现乱码,这里选择for-range来输出
		if a.MatchString(string(v)) {
			//判断是否为中文,如果是返回一个true,不是返回false。这俩面MatchString的参数要求是string
			//但是 for-range 返回的 value 是 rune 类型,所以需要做一个 string() 转换
			fmt.Printf("str 字符串第 %v 个字符是中文。是“%v”字\n", i+1, string(v))
		}
	}
}

方法二

go的unicode编码库里面已经内置了判断方法:

func IsContains(str string) bool {
   for _, v := range str {
   	  // 判断当前字符是否是Han
      if unicode.Is(unicode.Han, v) {
         return True
      }
   }
 
   return False
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
UTF-8,GBK,ASCII和Unicode都是用于表示和编码字符的字符集或编码规范。 ASCII(American Standard Code for Information Interchange)是一种基本的字符编码标准,它使用7位二进制数(共128个)来表示英语字符、数字和一些特殊字符。ASCII编码被广泛应用在计算机系统中,但只能表示有限的字符范围,并不能满足其他语言和符号的需求。 GBK(Guo Biao Kai)是中国国家标准局制定的一种字符编码标准,它是对ASCII的扩展,可以表示更广泛的中文字符范围。GBK使用2个字节来表示一个汉字或其他特殊字符,与ASCII编码兼容,同时可以表示更多字符。 Unicode是一个字符集标准,它为世界上几乎所有的字符都分配了一个唯一的数字编码,包括各种语言的字符、符号和图形。Unicode使用32位二进制数(即4个字节)来表示一个字符,所以它能表示的字符范围更广。Unicode编码的目标是实现全球通用的字符编码标准,以解决不同国家和地区之间的字符编码问题。 UTF-8是一种对Unicode进行编码的变长字符编码方式。UTF-8使用了ASCII编码的机制,对于ASCII字符使用1个字节表示,而对于Unicode字符使用多个字节表示。UTF-8保留了ASCII编码对于英文字符的兼容性,可以表示全球范围内的字符,并且在存储和传输中能够节省空间。 综上所述,ASCII是最简单的字符编码标准,GBK是对ASCII的扩展,能表示更多的中文字符,Unicode是全球通用的字符集标准,而UTF-8是对Unicode进行编码的一种变长字符编码方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Generalzy

文章对您有帮助,倍感荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值