编码转换

字符集和编码知识

試著忘記壹切 提交于 2020-03-11 17:42:10
字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集是多 个字符的集合,字符集种类较多,每个字符集包含的字符个数 不同 ,常见字符集名称:ASCII 字符集、ISO 8859字符集、GB2312字符集、BIG5字符集、 GB 18030字符集、Unicode字符集等 。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种 文字。 编码(Encoding)和字符集不同。字符集只是字符的集合,不一定适 合作 网络传送、处理,有时 须经编码(Encode)后才能应用。如Unicode可依不同需要以UTF-8、UTF-16、UTF-32等 方法 编码 。 因此,对字符进行编码,是信息交流的技术基础。本文将按照字符集的时间顺序讨论几种典型 的字符集,选取几种代表性的字符集,研究历史由来、特点、技术特征。 ASCII 字符集 1.名称的由来 ASCII(American Standard Code for Information Interchange,美国信息互换 标准 代码) 是基于罗马字母表的一套电脑编码系统。 2.特点 它主要用于显示现代 英语 和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际 标准ISO 646。 3.包含内容 控制字符:回车键、退格、换行键等。 可显示字符:英文大小写字符、阿拉伯数字和西文符号 4

pyttsx的中文语音识别问题及探究之路

流过昼夜 提交于 2020-03-11 13:32:57
最近在学习pyttsx时,发现中文阅读一直都识别错误,从发音来看应该是字符编码问题,但搜索之后并未发现解决方案。自己一路摸索解决,虽说最终的原因非常可笑,大牛们可能也是一眼就能洞穿,但也值得记录一下。嗯,主要并不在于解决之道,而是探究之旅。 1、版本(python2中谈编码解码问题不说版本都是耍流氓)   python:2.7   pyttsx:1.2   OS:windows10中文版 2、系统的各种字符编码 sys.getdefaultencoding() ascii sys.getfilesystemencoding() mbcs locale.getdefaultlocale() ('zh_CN', 'cp936') locale.getpreferredencoding() cp936 sys.stdin.encoding UTF-8 sys.stdout.encoding UTF-8 3、探究之路  (1)初体验:   按照http://pyttsx.readthedocs.io/en/latest/engine.html 的说明,传入中文,使用unicode类型,utf-8编码,结果发音并不是输入的内容。 1 #-*- coding: UTF-8 -*- 2 import sys 3 import pyttsx 4 5 reload(sys) 6 sys

Go语言中的字符和字符串

落爺英雄遲暮 提交于 2020-03-10 11:53:48
Go语言中的字符 在Go语言中,没有字符类型,字符类型是rune类型,rune是int32的别称。 下面用一个简单的程序来演示字符类型: package main import ( "fmt" "reflect" ) func main() { r := '我' fmt.Printf("%q的类型为:%t 二进制为:%b\n", r, r, r) rType := reflect.TypeOf(r).Kind() fmt.Printf("r的实际类型为:%s\n", rType) } 程序输出: '我'的类型为:%!t(int32=25105) 二进制为:110001000010001 r的实际类型为:int32 Go语言天生支持Unicode,那我产生一个问题:Unicode字符的长度是多少? 这个问题的问法有没有问题?其实仔细想想,这样问是有问题的。首先,Unicode的基础是一个有编号的字符集,在字符集之上又规定了模块化的编码等等技术层次,各种具体的编码形式并不一致。因此,严格来说,Unicode是没有“长度”这一说的,它是抽象的字符,只有Unicode的编码才有具体的字节长度。而且不同的编码实现,长度也不一样。 Unicode 目前规划的总空间是17个平面(平面0至16),每个平面有 65536 个码点。我们常用的平面0(「Basic Multilingual Plane」

Servlet中Request与Response应用

泪湿孤枕 提交于 2020-03-09 17:51:56
一、Response 1.Resonse的继承结构: ServletResponse--HttpServletResponse 2.Response代表响应,于是响应消息中的状态码、响应头、实体内容都可以由它进行操作,由此引伸出如下实验: 3.利用Response输出数据到客户端 response.getOutputStream().write("中文".getBytes())输出数据,这是一个字节流,是什么字节输出什么字节,而浏览器默认用平台字节码打开服务器发送的数据,如果服务器端使用了非平台码去输出字符的字节数据就需要明确的指定浏览器编码时所用的码表,以防止乱码问题。response.addHeader("Content-type","text/html;charset=gb2312") response.getWriter().write(“中文”);输出数据,这是一个字符流,response会将此字符进行转码操作后输出到浏览器,这个过程默认使用ISO8859-1码表,而ISO8859-1中没有中文,于是转码过程中用?代替了中文,导致乱码问题。可以指定response在转码过程中使用的目标码表,防止乱码。response.setCharcterEncoding("gb2312"); 其实response还提供了setContentType("text/html;charset

Node.js Buffer(缓冲区)

大兔子大兔子 提交于 2020-03-09 15:18:03
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。 但在处理像TCP流或文件流时,必须使用到二进制数据。 因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。 在v6.0之前创建Buffer对象直接使用new Buffer()构造函数来创建对象实例,但是Buffer对内存的权限操作相比很大,可以直接捕获一些敏感信息。 所以在v6.0以后,官方文档里面建议使用 Buffer.from() 接口去创建Buffer对象。 Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 、 UCS2 、 Base64 、或十六进制编码的数据。 通过使用显式的字符编码,就可以在 Buffer 实例与普通的 JavaScript 字符串之间进行相互转换。 const buf=Buffer.from("cyy","ascii"); //字符编码转换 console.log(buf.toString("ascii")); console.log(buf.toString("utf8")); console.log(buf.toString("utf16le")); console.log(buf.toString("base64")); console.log(buf.toString("latin1")); console

Python的输入与输出、Python输入EOF判断

那年仲夏 提交于 2020-03-09 07:39:16
输入采用input()方法。input输入的元素都是以str形式保存的。输出采用print()方法。 Python中没有代表EOF的字符,因此检测到输入EOF时会直接报错EOFerror。因此我们要采用下面的写法来检测输入到EOF后停止循环输入: while True: try: s = int(input()) print(s) except: print('input complete') break 1 2 3 4 5 6 7 如果在cmd.exe中运行这段代码,输入Ctrl+Z即可停止输入。如果是在Pycharm内建运行框中运行这段代码,输入Ctrl+D即可停止输入。 如果是在Python中读取文件,Python到读取到文件结尾后是返回空字符串的,所以python可以这样判断: str = '' with open('readme.txt', 'r', encoding='utf-8') as fp: while True: s = fp.read(10) if s == '': break str += s print(str) 1 2 3 4 5 6 7 8 Python字符串类型、空值类型、Unicode编码、UTF-8编码、格式化字符串 字符串是以单引号’或双引号"括起来的任意文本。如果字符串内部既包含’又包含",可以用转义字符\来标识。\n表示换行,\t表示制表符

LeetCode 力扣 89. 格雷编码

核能气质少年 提交于 2020-03-09 07:03:05
题目描述(中等难度) 生成 n 位格雷码,所谓格雷码,就是连续的两个数字,只有一个 bit 位不同。 解法一 动态规划 按照动态规划或者说递归的思路去想,也就是解决了小问题,怎么解决大问题。 我们假设我们有了 n = 2 的解,然后考虑怎么得到 n = 3 的解。 n = 2 的解 00 - 0 10 - 2 11 - 3 01 - 1 如果再增加一位,无非是在最高位增加 0 或者 1,考虑先增加 0。由于加的是 0,其实数值并没有变化。 n = 3 的解,最高位是 0 000 - 0 010 - 2 011 - 3 001 - 1 再考虑增加 1,在 n = 2 的解基础上在最高位把 1 丢过去? n = 3 的解 000 - 0 010 - 2 011 - 3 001 - 1 -- -- -- -- -- -- - 下面的是新增的 100 - 4 110 - 6 111 - 7 101 - 5 似乎没这么简单哈哈,第 4 行 001 和新增的第 5 行 100,有 3 个 bit 位不同了,当然不可以了。怎么解决呢? 很简单,第 5 行新增的数据最高位由之前的第 4 行的 0 变成了 1,所以其它位就不要变化了,直接把第 4 行的其它位拉过来,也就是 101。 接下来,为了使得第 6 行和第 5 行只有一位不同,由于第 5 行拉的第 4 行的低位,而第 4 行和第 3

Servlet学习笔记 -ServletRequest、ServletResponse

╄→гoц情女王★ 提交于 2020-03-09 06:57:41
1、ServletRequest   在Servlet中,ServletRequest是一个非常重要的接口。这个类是由Servlet容器进行实例化,然后作为参数传递给了service()方法。在HttpServlet中,对应的是HttpServletRequest接口,HttpServletRequest 接口继承与ServletRequest接口。   在Servlet 3.0 API中,ServletRequest接口或类的层级结构如下:   当然,ServletRequest接口或类的层级结构中不仅仅包括Servlet 3.0 API中的这几个接口或类,同时在Tomcat容器和spring中都有很对相应的实现,比如:org.apache.catalina.core.ApplicationRequest和org.springframework.web.multipart.MultipartHttpServletRequest等。 ServletRequest作用:    Servlet容器对于接收到的每一个请求,都会创建一个ServletRequest对象,并把这个对象作为参数传递给Servlet的sevice( )方法。ServletRequest对象封装了关于这次请求的相关信息。继承该接口的接口,可以携带一些和协议相关的特定信息,比如javax.servlet.http

python模块之codecs

回眸只為那壹抹淺笑 提交于 2020-03-09 06:29:23
codecs专门用作编码转换,当我们要做编码转换的时候可以借助codecs很简单的进行编码转换 codecs模块提供一个open方法,三个参数encoding, errors, buffering,这三个参数都是可选参数,但是对于应用来说,需要明确指定encoding的值,而errors和buffering使用默认值即 可。使用方法如下: import codecs # 从文件读取数据 data = codecs.open("2.txt", encoding="UTF-8") # 一行一行读取数据 data1 = data.readline() print(data1) # 度去完数据要把数据对象进行关闭,从内存里面释放出来 data.close() codecs模块为我们解决的字符编码的处理提供了lookup方法,它接受一个字符编码名称的参数,并返回指定字符编码对应的 encoder、decoder、StreamReader和StreamWriter的函数对象和类对象的引用。为了简化对lookup方法的调用, codecs还提供了getencoder(encoding)、getdecoder(encoding)、getreader(encoding)和 getwriter(encoding)方法;进一步,简化对特定字符编码的StreamReader、StreamWriter和

字符串

↘锁芯ラ 提交于 2020-03-08 22:25:15
1. 概述 字符串是指包含若干字符的容器结构。在python中,字符串属于不可变有序序列。使用单引号、双引号或三双引号作为定界符,并且不同的定界符之间可以互相嵌套。 2. 字符串编码格式 ASCII 仅对10个数字、26个大小写英文字母及一些其他符号进行了编码。采用1个字节进行编码,最多只能表示256个符号 UTF-8对全世界所有国家需要用到的字符进行了编码,以一个字节表示英语字符,以3个字节表示中文。 GB2312是我国定制的中文编码,使用1个字节表示英语,2个字节表示中文 GBK是GB2312的扩充,而CP936是微软在GBK的基础上开发的编码方式 不同的编码格式之间相差很大,采用不同的编码格式意味着不同的表示和存储形式。 python 3.x 默认使用UTF8编码格式,完全支持中文。在统计字符串长度时,无论是一个数字、英文字母,还是一个汉字,都按一个字符对待和处理。 encode() 方法表示使用指定的字符串编码格式编码 decode() 方法表示使用指定编码格式解码 3. 转义字符与原始字符串 转义字符是指,在字符串中某些特定的符号前加一个斜线之后,该字符将被解释为另一种含义,不再表示本来的字符。 在字符串前面加上字母R或r表示原始字符串。 4. 字符串格式化 python的字符串格式化有两种方式: % 和 format % [-] [+] [0] [m] [n] 格式字符