字符编码

ASCII、Unicode、UTF-8编码方式

柔情痞子 提交于 2020-01-14 06:48:03
(1)ASCII是主要针对英文字母和数字以及一些英文字符进行的编码方式; (2)Unicode包含有世界上普遍问题的编码方式,比如汉字和汉语,日语等字符; (3)UTF-8为了实现Unicode编码带来的内存大而设计的编码方式,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。 1、ord函数和chr函数:实现字符和对应整数之间的转换 对于单个字符的编码,Python提供了 ord() 函数获取字符的整数表示, chr() 函数把编码转换为对应的字符: ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文' 2、encode()函数和decode()函数:实现字节和字符之间的转换 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文' 3、计算字符和字节的长度函数len() 要计算 str 包含多少个字符,可以用 len(

ASCII,Unicode,UTF-8 和 GBK

烂漫一生 提交于 2020-01-13 05:00:12
转自 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 。 如果我也有想阮一峰一样的探究总结能力,一定会变得越来越好。 简单来说, Unicode 是最全的编码方式,囊括世界上所有的符号。 UTF-8 是 Unicode 的实现方式之一,它主要采用了变长存储的方式解决了Unicode 存储空间过大问题。 ASCII 码一共规定了128个字符,对于英文表示是完全足够了。UTF-8表示单字符时和ASCII码是一致的,也就是说,对于128个ASCII码对应的字符,其使用UTF-8编码方式和ASCII码完全一致。 GBK 是汉字编码的一种方式,与Unicode 和 UTF-8 是毫无关系的,但都是一种对字符的编码方式。 正文: 一、 ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有 0 和 1 两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 00000000 到 11111111 。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。 ASCII

从零开始的java学习Day15----------基础篇(IO流)

旧城冷巷雨未停 提交于 2020-01-12 05:39:05
IO流 我们电脑中的数据,都是一个个二进制数字(字节)组成,我们传输数据,就可以看做是一种数据的流动,以内存为基准按照流动的方向,就分为输入流(流向内存)和输出流(输出内存)。输入也叫做读取数据,输出也叫做写出数据,这就是IO流 I:input(输入) O:output(输出) IO的分类 按照数据的流向分为: 输入流:把数据从其他设备上读取到内存中的流。 输出流:把数据从内存 中写出到其他设备上的流 按照数据类型分为: 字节流 :以字节为单位,读写数据的流。 字符流 :以字符为单位,读写数据的流。 顶级父类 字节流:字节输入流(InputStream) 字节输出流(OutputStream) 字符流:字符输入流(Reader) 字符输出流(Writer) 字节流 字节输出流OutputStream OutputStream是所有字节输出流的超类,将指定字节信息写出到目的地,他里面定义了字节输出流的基本共性方法。 常用方法: void close ( ) :关闭此输出流并释放与此流相关联的任何系统资源。 void flush ( ) :刷新此输出流并强制任何缓冲的输出字节被写出。 abstract void write ( int b ) :将指定的字节输出到输出流(自动转为字符型) void write ( byte [ ] b ) :将指定字节数组内元素依次输出到输出流

错误:编码GBK的不可映射字符

对着背影说爱祢 提交于 2020-01-11 20:54:37
  当Java源代码中包含中文字符时,我们在用javac编译时会出现“错误:编码GBK的不可映射字符”。   由于JDK是国际版的,我们在用javac编译时,编译程序首先会获得我们操作系统默认采用的编码格式(GBK),然后JDK就把Java源文件从GBK编码格式转换为Java内部默认的Unicode格式放入内存中,然后javac把转换后的Unicode格式的文件编译成class类文件,此时,class文件是Unicode编码的,它暂存在内存中,紧接着,JDK将此以Unicode格式编码的class文件保存到操作系统中形成我们见到的class文件。当我们不加设置就编译时,相当于使用了参数:javac -encoding GBK Test.java,就会出现不兼容的情况。   使用-encoding参数指明编码方式:javac -encoding UTF-8 Test.java,就可以了。 来源: https://www.cnblogs.com/lucky-zhangcd/p/8409810.html

shell错误 sed: can't read : No such file or directory

送分小仙女□ 提交于 2020-01-11 00:32:31
出现这样的问题主要是在于 空字符 造成的,情况分为3种 第一种是windows上的文件 ,在Linux上运行,这种可以通过查看文件编码确认,unix + utf-8 可以解决。 第二种是网页复制的shell代码 ,里边有些未知编码的空格字符,这种情况多次全局替换,可以解决,实在不行照着代码敲一遍总可以解决。 第三种是 sed命令使用了换行符 \ 且在换行符后加入了空格 ,例如: value1=test1 value2=test2 sed -i -r \ -e "s/(key1[ =]*).*/\1${value1}/g" \ -e "s/(key2[ =]*).*/\1${value2}/g" \ /root/test.conf 这是一个修改配置文件的脚本,但是在倒数第二行的\后边有空格,续行符后的空格在这里被解释为了文件路径,所以找不到文件。 来源: CSDN 作者: whatday 链接: https://blog.csdn.net/whatday/article/details/103924766

中文乱码详解

ぃ、小莉子 提交于 2020-01-10 20:04:05
一、几种编码方式介绍 1、Unicode、UTF-8 和 ISO8859-1和乱码问题 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来"表示"。 2. 编码基本知识 最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。 2.1. iso8859-1 属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。 很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用 iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然"中文"两个字不存在iso8859-1编码,以gb2312编码为例,应该是"d6d0 cec4"两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:"d6 d0 ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节"e4 b8 ad e6 96 87"。 很明显

Windows SDK编程 API入门系列(转)

与世无争的帅哥 提交于 2020-01-10 08:00:28
本文转载自: https://www.cnblogs.com/yjkai/archive/2011/11/11/2245568.html 作者:yjkai 转载请注明该声明。 之一 -那‘烦人’的Windows数据类型 原创文章,转载请注明作者及出处。 首发 http://blog.csdn.net/beyondcode http://www.cnblogs.com/beyond-code/ http://hi.baidu.com/beyondcode Baidu文章地址: http://hi.baidu.com/beyondcode/blog/item/09370f24526d6b6835a80f54.html CSDN文章地址: http://blog.csdn.net/beyondcode/archive/2009/03/23/4015769.aspx Hello Everybody This is beyondcode 大家好 再次自我介绍一下 我是beyondcode, 这次心血来潮, 计划着做一系列关于Windows API 编程的教程,用于帮助一些在Windows API编程上有疑惑的,纳闷的,迷惑的新手朋友们。 先解释一些术语或名词吧 SDK是Software Development Kit的简写,也就是软件开发包的意思,其中就包含了我们写程序要用到的一些头文件,库

永远不要在MySQL中使用UTF-8

余生颓废 提交于 2020-01-10 04:09:38
转自:Python之禅 译文:http://suo.im/4zBuvs 来自:http://ju.outofmemory.cn 最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误: Incorrectstring value:‘\xF0\x9F\x98\x83 <…’ for column ‘summary’ at row 1 我用的是UTF-8编码的客户端,服务器也是UTF-8编码的,数据库也是,就连要保存的这个字符串“ <…”也是合法的UTF-8。 问题的症结在于,MySQL的“utf8”实际上不是真正的UTF-8。 “utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。 MySQL一直没有修复这个bug,他们在2010年发布了一个叫作“utf8mb4”的字符集,绕过了这个问题。 当然,他们并没有对新的字符集广而告之(可能是因为这个bug让他们觉得很尴尬),以致于现在网络上仍然在建议开发者使用“utf8”,但这些建议都是错误的。 简单概括如下: 1、MySQL的“utf8mb4”是真正的“UTF-8”。 2、MySQL的“utf8”是一种“专属的编码”,它能够编码的Unicode字符并不多。 我要在这里澄清一下:所有在使用“utf8

web项目存数据到数据库,中文乱码,解决过程

不打扰是莪最后的温柔 提交于 2020-01-09 12:33:26
尽量用post提交,不要用问号拼接参数的方式,就不会乱码了 原文:http://blog.csdn.net/wzygis/article/details/50964864 在 Java 开发中,如果框架搭建的不完善或者初学者在学习过程中,出现中文 乱码 是经常的事儿(哈。谁让发明 Java 语言的不是中国人呢) 今天跟大家分享几个解决java Web开发 中,request.getParameter()获取URL中文参数乱码的解决办法 解决问题,先要研究问题,URL传中文参数为什么会出现乱码? 原因:Http请求传输时将url以ISO-8859-1编码,服务器收到字节流后默认会以ISO-8859-1编码来解码成字符流(造成中文乱码) 解决办法:我们需要把request.getParameter(“参数名”)获取到的字符串先用ISO-8859-1编码成字节流,然后再将其用utf-8解码成字符流 代码: String str = new String(request.getParameter("参数名").getBytes("iso-8859-1"), "utf-8"); 这是通过转码的方式处理乱码问题,我们也可以通过Tomcat配置文件,设置URL编码集(URIEncoding)设置编码,这种方法也是一劳永逸的, 修改Tomcat/conf 目录下 server.xml

MySQL 字符集和校验规则工作流程

一曲冷凌霜 提交于 2020-01-07 20:40:34
MySQL 字符集和校验规则工作原理 字符编码相关参数 数据流中的转码过程 校验规则 Tips:字符集和校验规则总是相伴的 一 从简单的建库语句开始 CREATE DATABASE [IF NOT EXISTS] <db_name> [[DEFAULT] CHARACTER SET <db_charset>] [[DEFAULT] COLLATE <db_collation>]; db_name : 数据库名 必填 db_charset:数据库的字符集 缺省为服务器字符集 db_collation:数据库的校验规则 缺省为服务器校对规则 二 字符集和字符编码是什么? 字符编码:将特定的字符与二进制码建立一一映射的集合就是字符集。每种字符集对应该种字符集的编码方式。 常见的字符集有 仅支持英文和特殊字符的ASCII、支持中英文的GBK、支持世界所有字符的Unicode等等<UTF-8是Unicode字符集的子集,他们不是两种编码方式>。 以ASCII字符集为例 它基于罗马字母表的编码方式,他不能表示中文仅仅包含了 全部的英文大小写和为数不多的特殊符号,每个字符一个字节低7位为编码位最高位保留,有些地方最高位做了扩充。增添了一些表格符号、运算符等。总而言之1个字节 8bit 表示一个字符,因为一一对应,所有一共有 2^7个字符。扩展字符集拥有2^8。 三 查看MySQL编码方式