字符编码

字符、字节和编码

隐身守侯 提交于 2020-01-22 01:57:48
  摘要: 介绍了字符与编码的发展过程,相关概念。举例Java实际应用中,编码的实现方法。最后,讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的方法。 1.编码问题的由来及相关概念 1.1字符与编码的发展    从计算机对多国语言的支持角度看,大致可以分为三个阶段: 系统内码 说明 系统 阶段一 ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示 英文DOS 阶段二 ANSI编码(本地化) 为使计算机支持更多语言,通常使用0x80~0xFF范围的2个字节来表示1个字符。比如:汉字‘中’在中文操作系统中,使用[0x06,0xD0]这两个字节存储。 不同的国家和地区制定了不同的标准,由此产生了GB2312、BIG5、JIS等各自编码标准。这些使用2个字节来代表一个字节来代表一个字符的各种汉字延伸编码方式,成为 ANSI编码 。在简单中文系统下,ASNI编码代表GB2312编码,在日文操作系统下,ANSI编码代表JIS编码。 不同ANSI编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段ANSI编码的文本中。 中文DOS,中文Windows95/98,日文Windows95/98 阶段三 UNICODE(国际化) 为了使国际间信息交流更加方便,国际组织制定了UNICODE字符集

python入门:字符编码

↘锁芯ラ 提交于 2020-01-21 15:34:44
字符编码 字符编码:字符----编码(字符编码表)---->二进制 目前内存中使用的统一是unicode,编码和解码对应了相应的字符集 保证不乱码的关键: 1.字符当初以什么编码存放的, 就应该以什么编码解码。 当存储的时候字符编码不对的时候,内存会存放错误的二进制,那么取出来的时候,无论以什么办法取,都是乱码 2.在python2中解释器默认使用的编码是ASCII码,python3默认使用的是UTF-8 在python文件头上插入: #coding:utf-8 修改python解释器的编码格式 #这个是读取的时候用什么编码(pycharm读取是什么编码,写入就是什么编码,比较方便。) 3.目前很多软件默认编码是UTF-8,windows上默认的是GBK,选择好字符集非常重要 #python程序在windows cmd上可以出结果,但是python2显示乱码,是因为cmd是gbk,python2是utf-8 #如果想在python2也使用python3一样的将代码转换成unicode,在代码将加入一个u a=u'丁' #赋值丁给a,存入内存为unicode,这样所有的平台都不会乱码了 更详细请看: https://www.cnblogs.com/linhaifeng/articles/5950339.html 来源: https://www.cnblogs.com/dinghc/p

wxWidgets随笔(6)-utf8中文(2)

自作多情 提交于 2020-01-21 04:32:43
当使用Microsoft Visual c++时不能编译,需要更改为使用mb_str()(这对于包含Unicode字符的文件名无效,请考虑使用wxWidgets类和函数来处理这些文件名,因为标准c++库不支持它们)。 另一类不兼容的更改是由于修改了一些虚方法来使用wxString参数而不是const wxChar 参数,从而使它们同时接受窄字符串和宽字符串。这不是一个问题,如果你只是调用这些函数,但你需要改变签名的派生类版本,如果你覆盖他们,否则他们不会被调用了。再次强调,确保这个问题不出现的最佳方法是使用警告函数签名不匹配的编译器重新构建代码(可以使用-Woverloaded-virtual g++选项)。 最后,一些结构字段,如著名的wxCmdLineEntryDesc::shortName、longName和description字段已被更改为const char 类型,而不是const wxChar*类型,因此,如果将wxT()或_T()与它们的初始化器一起使用,则需要删除它们。 Unicode是什么? Unicode是一种字符编码标准,它解决了以前标准(如ASCII标准)的缺点,使用8位、16位或32位对每个字符进行编码。这使得有足够的代码点(参见下面的定义)一次性编码所有世界语言。更多关于Unicode的细节可以在http://www.unicode.org/找到。

谈谈Unicode编码

送分小仙女□ 提交于 2020-01-21 00:13:53
这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢? 我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢? 问题二: 最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF-8这三种编码方式的相互转换。对于Unicode(UCS2)、GBK、UTF-8这些编码方式,我原来就了解。但这个程序让我有些糊涂,想不起来UTF-16和UCS2有什么关系。 查了查相关资料,总算将这些问题弄清楚了,顺带也了解了一些Unicode的细节。写成一篇文章,送给有过类似疑问的朋友。本文在写作时尽量做到通俗易懂,但要求读者知道什么是字节,什么是十六进制。 0、big endian和little endian big endian和little

文件编码格式详解

旧巷老猫 提交于 2020-01-21 00:11:48
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码:  00110101 00110110 00110111 00111000      ↓     ↓    ↓    ↓ 十进制码: 5     6    7    8 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。 这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF

文件编码格式

早过忘川 提交于 2020-01-20 23:04:20
来源:http://www.cnblogs.com/joeblackzqq/archive/2011/04/11/2012005.html 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码:  00110101 00110110 00110111 00111000      ↓     ↓    ↓    ↓ 十进制码: 5     6    7    8 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。 UCS-2编码(16进制) UTF-8 字节流(二进制) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx

文件编码格式

一个人想着一个人 提交于 2020-01-20 23:03:09
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码:  00110101 00110110 00110111 00111000      ↓     ↓    ↓    ↓ 十进制码: 5     6    7    8 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。 UCS-2编码(16进制) UTF-8 字节流(二进制) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx 0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx 问题一: 使用Windows记事本的“另存为”

文件编码格式

不问归期 提交于 2020-01-20 23:01:37
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码:  00110101 00110110 00110111 00111000      ↓     ↓    ↓    ↓ 十进制码: 5     6    7    8 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。 UCS-2编码(16进制) UTF-8 字节流(二进制) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx 0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx 问题一: 使用Windows记事本的“另存为”

mysql中utf8和utf8mb4区别

社会主义新天地 提交于 2020-01-20 17:37:05
一、什么是utf8mb4 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了 二、 内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。 三、问题根源 最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。 utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是

谈谈字符集和编码

倾然丶 夕夏残阳落幕 提交于 2020-01-20 15:39:20
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。 开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。遇上00x10, 终端就换行,遇上0x07, 终端就向人们嘟嘟叫,例好遇上0x1b, 打印机就打印反白的字,或者终端就用彩色显示字母。他们看到这样很好,于是就把这些0x20以下的字节状态称为"控制码"。 他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。大家看到这样,都感觉很好,于是大家都把这个方案叫做 ANSI 的"Ascii"编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。 后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机