字符编码

关于ASCII,Unicode和UTF-8

孤街浪徒 提交于 2020-01-28 17:13:46
自己也不是很明白这些编码,百度了一下,整理出来与大家分享分享,在此感谢作者。 先说说这些编码 ANSI:最早的时候计算机ASCII码只能表示256个符号(含控制符号),这个字符集表示英文字母足够,其中,我们键盘上可见的符号的编码范围是从32到126(大小写英文字母、数字、英文符号等)。但表示汉字、日语、韩语就不太够用了,汉字常用字有3000多个。 但是中国人也要用电脑打字,于是,中国人就研究出来了最早的中文字符集GB2312(GBK就是后来的扩展),GB2312的做法是,把ASC码取值范围的128~255这个区间挪用了一下,用两个ASC码表示一个汉字,这样可用的编码范围用十六进制表示就是0x8080到0xFFFF,这大概能表示一万多个符号,足够了。[注:实际没用那么多,GBK的范围是8140-FEFE] 那个时候,计算机技术还不发达,各个国家搞自己的,比如台湾,也另搞了一套,叫BIG5(俗称:大五码),跟大陆的也不太一样,但方法是类似的,都是用0x80到0xFF这个区间。 然后日语(有编码JIS)、韩语等等也各搞一套。 这些国家的编码区间都是重叠的,但同一个汉字(比如有一些汉字同时存在于简体、繁体、日语汉字中)有不同的编码,很混乱是不是?但也凑合用了。编码不同导致了很多麻烦,比如一个网页,如果你不知道它是什么编码的,那么你可能很难确定它显示的是什么,一个字符可能是大陆简体/台湾繁体

12.字符型变量和常量

一个人想着一个人 提交于 2020-01-28 12:32:23
字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如’A’是一个字符,它与”A”是不同的,”A”表示含有一个字符的字符串。 char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。 Unicode具有从0到65535之间的编码,他们通常用从’\u0000’到’\uFFFF’之间的十六进制值来表示(前缀为u表示Unicode) 数组越界 来源: CSDN 作者: 云疏不知数 链接: https://blog.csdn.net/qq_43808700/article/details/104098363

Java中的字节和字符

老子叫甜甜 提交于 2020-01-28 07:46:09
最近在看Java中的IO相关知识,发现对字节和字符的理解还不够。写篇总结记录一下。 一、字节 所谓字节(Byte),是计算机数据存储的一种计量单位。一个二进制位称为比特(bit),8个比特组成一个字节,也就是说一个字节可以用于区分256个整数(0~255)。由此我们可以知道,字节本是面向计算机数据存储及传输的基本单位,后续的字符也就是以字节为单位存储的,不同编码的字符占用的字节数不同。 那么在Java中,除了存储的意义外,Java还将字节Byte作为一种基本数据类型,该数据类型在内存中占用一个字节,用于(-128~127)范围内的整数 byte a = -128; byte b = 127; 总的来说,字节在Java中有两种含义: 存储的单位 Java的数据类型,用于表示-128~127范围的整数 二、字符 计算机底层存储的是字节,字符的设计则是用于展示符号。屏幕上显示的各种文字,数字,符号等就是解码的字符。所以我们说字符是用来显示的符号,它将存储的字节转换成人们看得懂的符号,因此字符的核心就是定义字节与展示符号之间的关系,这种映射关系通常也叫做编码。 2.1、编码的由来 为什么要编码呢?前面我们知道数据都是以字节为单位存储在计算机中,字节可以区分256个整数,最容易想到的就是将这256个整数定义为256种状态并分别对应256个字符。但是人类符号太多了,256种是不够的

mysql中utf8和utf8mb4区别

那年仲夏 提交于 2020-01-27 13:37:36
mysql中utf8和utf8mb4区别 一、总结 一句话总结: 要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持(查看版本: select version();) 1、utf8mb4是什么? 4字节unicode:mb4就是most bytes 4的意思,专门用来兼容四字节的unicode:好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 2、既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 4字节异常:mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了 三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。 3、Mysql 中的 utf8 为什么只支持最长三个字节的 UTF-8字符呢?

mysql默认空列的弊端

冷暖自知 提交于 2020-01-27 05:42:24
java后台开发中,设计表时,经常设置字符串类型字段的默认值为null,殊不知字段默认值为null,有哪些性能或存储空间浪费等细微问题。数据量小时,问题不容易发现,但是数据量上亿,细微问题将影响我们的应用性能。 概括 null列在查询的时候容易照成误解 null列在使用count的时候必须要多注意,COUNT(bindTime)不计算null值。 null作为索引需要更多空间,让索引变得复杂 问题一 问题二 新建一个表 CREATE TABLE ` t_car ` ( ` carId ` BIGINT ( 20 ) NOT NULL , ` plateNumber ` VARCHAR ( 50 ) NOT NULL COMMENT '车牌号' , ` memberId ` BIGINT ( 20 ) NOT NULL DEFAULT '0' COMMENT '车主' , ` logoId ` TINYINT ( 6 ) DEFAULT NULL COMMENT '车标' , ` carColor ` TINYINT ( 4 ) DEFAULT NULL COMMENT '车辆颜色' , ` plateColor ` TINYINT ( 4 ) DEFAULT NULL COMMENT '车牌颜色' , ` carType ` TINYINT ( 4 ) NOT NULL

Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci与utf8mb4_unicode_ci的选择

ε祈祈猫儿з 提交于 2020-01-27 00:08:56
utf8 与 utf8mb4 标准的 UTF-8 字符集编码是可以用 1~4 个字节去编码21位字符,是一种变长的编码格式,这几乎包含了是世界上所有能看见的语言了。然而在MySQL里实现的utf8最长使用3个字节,节省空间但不能表达全部的UTF-8,只支持到了 Unicode 中的“基本多文种平面”(U+0000至U+FFFF,Basic Multilingual Plane,BMP),包含了控制符、拉丁文,中、日、韩等绝大多数国际字符,但并不是所有,最常见的就算现在手机端常用的表情字符 emoji和一些不常用的汉字,如 “墅” ,这些需要四个字节才能编码出来。 MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4,使用4个字节来表示完整的UTF-8。简单说 utf8mb4 是 utf8 的超集并完全兼容utf8,能够用四个字节存储更多的字符。 注:QQ里面的内置的表情不算,它是通过特殊映射到的一个gif图片。一般输入法自带的就是。 当你的数据库里要求能够存入这些表情或宽字符时,可以把字段定义为 utf8mb4,同时要注意连接字符集也要设置为utf8mb4,否则在 严格模式 下会出现 Incorrect string value: /xF0/xA1/x8B/xBE/xE5/xA2… for column 'name'这样的错误

Python之文件操作

痞子三分冷 提交于 2020-01-26 03:13:10
open函数 1、打开文件的方式 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。 打开文件的模式有: r , 只读模式【默认】 w, 只写模式【不可读;不存在则创建;存在则清空内容;】 x, 只写模式【不可读;不存在则创建,存在则报错】 a, 追加模式【可读; 不存在则创建;存在则只追加内容;】 "+" 表示可以同时读写某个文件 r+, 读写【可读,可写】 w+,写读【可读,可写】 x+ ,写读【可读,可写】 a+, 写读【可读,可写】 "b"表示以字节的方式操作 rb 或 r+b wb 或 w+b xb 或 w+b ab 或 a+b 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型 2.操作 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 5 # 1. r读模式 默认 6 # open是去找当前操作系统的编码 f句柄 7 f = open('xxx', 'r', encoding='utf8') 8 # data = f.read() 9 # data = f.readable() # 可读 10 # print('第一行', f.readline(), end='') 11 # print('第二行', f.readline()) 12

URL传参中不能带特殊的字符以及处理方案

自作多情 提交于 2020-01-25 20:58:23
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。 如果不使用转义字符,这些编码就会当URL中定义的特殊字符处理。 下表中列出了一些URL特殊符号及编码 十六进制值 1.+ URL 中+号表示空格 %2B 2.空格 URL中的空格可以用+号或者编码 %20 3./ 分隔目录和子目录 %2F 4.? 分隔实际的 URL 和参数 %3F 5.% 指定特殊字符 %25 6.# 表示书签 %23 7.& URL 中指定的参数间的分隔符 %26 8.= URL 中指定参数的值 %3D 可以采用JS的编码方法: 1. escape - 采用ISO Latin字符集对指定的字符串进行编码。不会被此方法编码的字符: @ * / + 2. encodeURI - 把URI字符串采用UTF-8编码格式转化成escape格式的字符串不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + ' 3. encodeURIComponent - 把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! * ( ) ' 文章来源: http://czy4411741.blog

外部排序,杀鸡焉用牛刀?

北城余情 提交于 2020-01-25 17:45:27
上篇: http://www.cnblogs.com/foreach-break/p/external_sort.html 字符集和编码 字节序 I/O方式 内存 磁盘 线程/同步/异步 数据特点 字符集和编码 为什么要考虑文件的编码? 当你将文件从阿拉伯传到中国,告诉你的中国朋友要进行一个外部排序,你的中国朋友也许会傻: 上面是什么? 乱码 . 你也可以这样体验乱码: echo "数" > t.txt iconv -f UTF-8 -t UNICODE t.txt ��pe 好了,你知道了如果不知道文件的编码,你可能会解析到乱码. 字符集是什么? charset - > char-set,字符的集合.比如 UNICODE、ASCII 编码是什么? encoding,字符的表示.比如 UTF-8、ASCII 字符集和编码的关系 你晕了,我也晕了,ASCII码怎么既是字符集又是编码? 历史上,字符集和编码是同义词,实际却又不尽相同,没有一个规范地定义,那怎么理解呢? 字符集,往往强调其所“支持”的字符范围,集外的字符它不支持.集合就有一个边界,边界内的我给个表示,边界外的我不知道怎么表示。 编码,往往强调针对某个字符集的字符,我这么去转换表达为机器可理解的方式-二进制,如果对某个字符集的字符,我的转换方式和其一致,那么我既是编码也是字符集,否则我就只是一种字符集的转换格式。 那么

浅谈mysql中utf8和utf8mb4区别

假装没事ソ 提交于 2020-01-24 20:50:22
转自:http://ourmysql.com/archives/1402 实践过程中发现有时mysql的字符集会引起故障,所以需要了解下这个知识点。 一、简介 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位