汉字编码字符集

一文说清文本编码那些事

只谈情不闲聊 提交于 2020-03-15 20:34:19
一直以来,编码问题像幽灵一般,不少开发人员都受过它的困扰。 试想你请求一个数据,却得到一堆乱码,丈二和尚摸不着头脑。有同事质疑你的数据是乱码,虽然你很确定传了 UTF-8 ,却也无法自证清白,更别说帮同事 debug 了。 有时,靠着百度和一手瞎调的手艺,乱码也能解决。尽管如此,还是很羡慕那些骨灰级程序员。为什么他们每次都能犀利地指出问题,并快速修复呢?原因在于,他们早就把编码问题背后的各种来龙去脉搞清楚了。 本文从 ASCII 码说起,带你扒一扒编码背后那些事。相信搞清编码的原理后,你将不再畏惧任何编码问题。 从 ASCII 码说起 现代计算机技术从英文国家兴起,最先遇到的也是英文文本。英文文本一般由 26 个字母、 10 个数字以及若干符号组成,总数也不过 100 左右。 计算机中最基本的存储单位为 字节 ( byte ),由 8 个比特位( bit )组成,也叫做 八位字节 ( octet )。 8 个比特位可以表示 $ 2^8 = 256 $ 个字符,看上去用字节来存储英文字符即可? 计算机先驱们也是这么想的。他们为每个英文字符编号,再加上一些控制符,形成了我们所熟知的 ASCII 码表。实际上,由于英文字符不多,他们只用了字节的后 7 位而已。 根据 ASCII 码表,由 01000001 这 8 个比特位组成的八位字节,代表字母 A 。 顺便提一下,比特本身没有意义,

UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 30380: illegal multibyte

烈酒焚心 提交于 2020-02-04 07:19:23
UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xbb’ in position 30380: illegal multibyte sequence 错误出现的解决办法 UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 30380: illegal multibyte sequence 如图: 重新导入编码格式 import io import sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码 此处用encoding=‘gb18030’,因为encoding='utf-8’会产生中文乱码 1.UTF-8:即国际通用字符编码,该编码方式囊括了世界各个国家及地区使用的字符集,尤其是对于英文字母的表示方法仅占用一个字节,很好的支持了欧美等国家的需要。优点:为了统一世界上各种编码而设计,通用性强。缺点:为了兼顾世界所有语言的字符,必须采用多位给字符编号,例如中文字符采用3字节编码方式,而gb18030采用2字节。 2.gb18030:是新出的国家标准。这个标准由国家强制执行(也是为了保证中国信息业的地位

GB2312、GBK与UTF-8的区别

杀马特。学长 韩版系。学妹 提交于 2020-01-19 09:21:05
标题简单的说一下,为什么要用编码? 在计算机内,储存文本信息用ASC II码,每一个字符对应着唯一的ASCII码。最初计算机是由美国发明的,他们也用的是键盘和上面的字母,所以他们的字符ASCII好解决。但是我们中国 的就不同了, 每个汉字要对应唯一的ASCII码。这样,就出来了国家制定的字符编码标准:GB2312、GBK等 。其他国家,其他语言也有他们对应的编码标准。 GB 就是国标的意思, GB2312和GBK主要用于汉字的编码,而UTF-8是全世界通用的 。意思就是说,如果你的网页主要面对使用汉语的中国人的话,使用 GB2312和GBK非常好,文字储存体积要小,有一些优点。如果你的网页要面向世界的话,你再用GB2312和GBK作为网页编码的话,有些电脑上的浏 览器没有这种编码,你的网页汉字内容就会变成无法识别的乱码。 它们通常用在网页的meta标签内,例如:,表示这个页面使用的是GB2312编码。这个信息是给浏览器看的,浏览器会优先考虑使用从网页头部提取出来的编码信息对网页进行解码。当然, 我们也可以强制浏览器使用某种编码解释网页,这样我们就看到了传说中的乱码。 GB2312、GBK和UTF-8都是一种字符编码,除此之外,还有好多字符编码。只是对于我们中国人的网站来说,用这三种编码 比较多。 标题GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

Python:将utf-8格式的文件转换成gbk格式的文件

拥有回忆 提交于 2020-01-11 09:14:34
需求:将utf-8格式的文件转换成gbk格式的文件 实现代码如下: def ReadFile(filePath,encoding="utf-8"): with codecs.open(filePath,"r",encoding) as f: return f.read() def WriteFile(filePath,u,encoding="gbk"): with codecs.open(filePath,"w",encoding) as f: f.write(u) def UTF8_2_GBK(src,dst): content = ReadFile(src,encoding="utf-8") WriteFile(dst,content,encoding="gbk") 代码讲解: 函数ReadFile的第二个参数指定以utf-8格式的编码方式读取文件,返回的结果content为Unicode 然后,在将Unicode以gbk格式写入文件中。 这样就能实现需求。 但是,如果要转换格式的文件中包含有一些字符并不包含在gbk字符集中的话,就会报错,类似如下: UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position 4813: illegal multibyte sequence

ubuntu 编码的修改

北城余情 提交于 2019-12-04 13:04:19
ubuntu 编码的修改 Ubuntu 默认采用UTF8编码,可以方便global。但对中文支持,还不细致,即便默认采用中文安装,也并不会自动添加GB*等支持,致使在Ubuntu下访问部分Win文本文件时,出现乱码。 I. 配置系统环境 执行 sudo vi /var/lib/locales/supported.d/zh 加入以下配置参数 zh_CN.GB18030 GB18030 (最新汉字编码字符集,向下兼容GBK,GB2312) zh_CN.GBK GBK (汉字扩展编码,向下兼容GB2312, 并包含BIG5全部汉字) zh_CN.GB2312 GB2312 (简化汉字编码字符集, 最近有客户要我们改进GB2312,太看得起我们了,我只能说:"NO!") zh_CN.GB18031 GB18031 (数字键盘汉字编码输入,面向手持设备,我的Nokia3120从来就是发短信,接听电话,无法和PC通讯,就不用这个了。 maybe用Google Android SDK的大侠们需要这个) zh_HK.BIG5 BIG5 (繁体) zh_TW.BIG5 BIG5 (繁体) 然后执行 sudo locale-gen 提示以下信息,成功了 zh_CN.GB18030... done zh_CN.GBK... done ...... II. 系统环境支持GB*内码了,但用vi,

ANSI和GB2312的区别

匿名 (未验证) 提交于 2019-12-03 00:34:01
这几天工作中用到不少字符集,Unicode、utf-8、GB2312等,但是在windows命令行里敲notepad进入文本编辑页面。保存时需要选择编码方式,但是不存在GB,却有ANSI,于是纳闷,回来一查,才恍然大悟:原来在简体中文系统下,ANSI 编码代表 GB2312 编码。   为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 ‘中’ 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。   不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。   不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 转载请标明出处: ANSI和GB2312的区别 文章来源: ANSI和GB2312的区别

C语言基础之中文编码格式GB2312(4)

不想你离开。 提交于 2019-12-01 20:26:42
GB2312历史回顾 GB2312编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE。 GB2312编码是第一个汉字编码国家标准,由中国国家标准总局1980年发布,1981年5月1日开始使用。GB2312编码共收录汉字6763个,其中一级汉字3755个,二级汉字3008个。同时,GB2312编码收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。 分区表示 GB2312编码对所收录字符进行了“分区”处理,共94个区,每区含有94个位,共8836个码位。这种表示方式也称为区位码。 01-09区收录除汉字外的682个字符。 10-15区为空白区,没有使用。 16-55区收录3755个一级汉字,按拼音排序。 56-87区收录3008个二级汉字,按部首/笔画排序。 88-94区为空白区,没有使用。 举例来说,“啊”字是GB2312编码中的第一个汉字,它位于16区的01位,所以它的区位码就是1601。 双字节编码 GB2312规定对收录的每个字符采用两个字节表示,第一个字节为“高字节”,对应94个区;第二个字节为“低字节”,对应94个位。所以它的区位码范围是:0101-9494。区号和位号分别加上0xA0就是GB2312编码。例如最后一个码位是9494,区号和位号分别转换成十六进制是5E5E,0x5E+0xA0=0xFE

putty使用教程

核能气质少年 提交于 2019-12-01 09:49:01
最近开始使用putty,在网络上看到一份很不错的教程,共享一下:putty使用方法,中文教程序言 大致内容罗列如下: 最简单的使用,登录 SSH 主机 中文乱码的处理 PuTTY 常用配置的说明 复制、粘贴 保存会话 注销 自动登录用户名 自动设置环境变量 设置代理服务器 自动执行命令 备份、删除 PuTTY 的设置 PuTTY 的 X11 转发 如何用 PuTTY 建立 SSH 隧道 如何用 PuTTY 建立反向的 SSH 隧道,像个特洛伊木马一样突破防火墙 把 PuTTY 作为一个安全的代理服务器 安全的上网不被嗅探 避免 MSN 等聊天工具被监听 怎样用 PSCP、PSFTP 安全的传输文件 功能强大的 SFTP 客户端 WinSCP 用 PuTTYgen 生成密钥,登录 SSH 主机不再需要口令 Pagent 代理密钥,每次开机只需要输入一次密钥口令 Plink 简单而又迅速的执行 SSH 主机上的程序 常见问题 除了上面的这些,还夹杂了一些 PuTTY 使用上的技巧、服务器配置的一些安全建议。说起来这是一些有关 PuTTY 的使用教程,其实也就是 SSH 的参考教程,绝大多数的内容在其他系统或软件上也都是一样的。不同的是参数、配置、命令行之类的,只要会了一个,其他也就触类旁通了。 一些基本知识 如果你已经知道 SSH、Telnet、Rlogin 这是什么,就跳过这一部分