Uncode

java字符串以及字符类型基础

…衆ロ難τιáo~ 提交于 2020-05-06 03:27:33
介绍一下java字符集和字符的编码方式, 首先要区分一下字符集和字符编码.所谓的字符集 类似于unicode,GB2312,GBK,ASCII等等.因为一开始只有26个英文字母需要 编一下号.所有用下ASCII就够了,但是随着计算机的发展,有更多的文字需要在计算机中进行表现,包括拉丁文,日文,中文等等,因此各国有发展了 各自国家文字的字符集. 然后为了统一地球,把所有国家的文字集中起来,发展了unicode(废话很多) unicode一开始是用2个字节(16位)对应一个符号.这跟java中一个char类型的变量所占用的字节数是相等的,没什么问题.但是后来unicode升级了 扩展到了20位(扩展为0x0000-0x10ffff),这样,一个char有时候就不能对应到一个unicode字符集中的一个符号了. 所以就用2个char来表示一个大于0xffff的数值在unicode字符集中所对应的符号.(假设说从0x0000-0xffff个数,每一个对应一个符号,都可以用一个char来表示, 那么,数字0x10ff00所对应的符号就必须用2个char来表示,假设0x10ff00直接用2个char也就是32位来表示,即表示为0x0010,0xff00,但是当读取到0x0010时候,如何判断这个数字是代表0x0010在unicode字符集中对应的一个符号,还是表示0x10ff00数字的高16位

细说【json&pickle】dumps,loads,dump,load的区别

我的梦境 提交于 2020-04-29 18:50:09
1 json.dumps() json.dumps()是将字典类型转化成字符串类型。 import json name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'} jsObj = json.dumps(name_emb) print(name_emb) print(jsObj) 2 json.dump() json.dump()用于将dict类型的数据转成str,并写入到json文件中 import json name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'} emb_filename = ('/home/cqh/faceData/emb_json.json') # solution 1 jsObj = json.dumps(name_emb) with open(emb_filename, "w") as f: f.write(jsObj) f.close() # solution 2 json.dump(name_emb, open(emb_filename, "w")) 3 json.loads() json.loads()将字符串类型转化成字典类型 import json name_emb = {'a':'1111','b':'2222','c':

python如何识别字符串有多少个中文字符

混江龙づ霸主 提交于 2019-11-30 14:04:57
前言: 这种需求并不常用,python主要用于爬取数据,对于数据有效性问题,应该在输入之前就限制。例如QT输入框能够限制,html输入也能限制。 对于c/c++、mysql等,普通字符占1个字节,中文占2个字节。只需直接求字节数就好。但是python并非如此,python的len计算的长度仅仅是“字符数”的意思。python写到mysql等有字节长度限制的库里就会出问题。 l = '中国123' print(len(l)) #5 那么如何知道真实字节长度呢?或者说,知道有多少个中文呢? 方法1:正则识别中文法 大部分的中文字符在\u4e00-\u9fa5间。用正则可以识别出这些中文。只需要len一下结果就知道有多少个中文。 实际字节数 = 中文数 + len(原字符串) l = '我的34世界123' print(re.findall('([\u4e00-\u9fa5])',l)) #['我', '的', '世', '界'] 但是这有个bug,虽然能获取大部分中文,但一些中文字符或少用字是检测不出来的 l = '我的34世¥界123' re.findall('([\u4e00-\u9fa5])',l) #['我', '的', '世', '界'] 方法2:解码 大多数时候,我们并不需要提取中文,仅仅知道真实长度就够了。(例如写入有约束的数据库之类的)