PB中字符编码转换

合集下载

Byte、KB、MB、GB、TB、PB转换

Byte、KB、MB、GB、TB、PB转换

Byte、KB、MB、GB、TB、PB转换1. 任意单位互转import java.math.BigDecimal;/*** @ClassName DataSize* @Description* @Author justin* @Date: 2020-11-13 11:14:55*/public enum DataSizeConverter {BYTE("B") {@Overridepublic double toByte(double size) {return roundHalfUp(size, D_BT, D_BT);}@Overridepublic double toKb(double size) {return roundHalfUp(size, D_KB, D_BT);}@Overridepublic double toMb(double size) {return roundHalfUp(size, D_MB, D_BT);}@Overridepublic double toGb(double size) {return roundHalfUp(size, D_GB, D_BT);}@Overridepublic double toTb(double size) {return roundHalfUp(size, D_TB, D_BT);}@Overridepublic double toPb(double size) {return roundHalfUp(size, D_PB, D_BT);}@Overridepublic DataSizeConverter upGrade() {return KB;}@Overridepublic DataSizeConverter downGrade() {return BYTE;}//本平台byte为最⼩单位不能降级了,所以返回本⾝⼤⼩@Overridepublic double downGrade(double size) {return size;}},KB("K") {@Overridepublic double toByte(double size) {return roundHalfUp(size , D_BT, D_KB);}@Overridepublic double toKb(double size) {return roundHalfUp(size , D_KB, D_KB);}@Overridepublic double toMb(double size) {return roundHalfUp(size, D_MB, D_KB);}@Overridepublic double toGb(double size) {return roundHalfUp(size, D_GB, D_KB);}@Overridepublic double toTb(double size) {return roundHalfUp(size, D_TB, D_KB);}@Overridepublic double toPb(double size) {return roundHalfUp(size, D_PB, D_KB);}@Overridepublic DataSizeConverter upGrade() {}@Overridepublic DataSizeConverter downGrade() {return BYTE;}},MB("M") {@Overridepublic double toByte(double size) {return roundHalfUp(size, D_BT, D_MB); }@Overridepublic double toKb(double size) {return roundHalfUp(size, D_KB, D_MB); }@Overridepublic double toMb(double size) {return roundHalfUp(size, D_MB, D_MB); }@Overridepublic double toGb(double size) {return roundHalfUp(size, D_GB, D_MB); }@Overridepublic double toTb(double size) {return roundHalfUp(size, D_TB, D_MB); }@Overridepublic double toPb(double size) {return roundHalfUp(size, D_PB, D_MB); }@Overridepublic DataSizeConverter upGrade() {return GB;}@Overridepublic DataSizeConverter downGrade() {return KB;}},GB("G") {@Overridepublic double toByte(double size) {return roundHalfUp(size , D_BT, D_GB); }@Overridepublic double toKb(double size) {return roundHalfUp(size , D_KB, D_GB); }@Overridepublic double toMb(double size) {return roundHalfUp(size, D_MB, D_GB); }@Overridepublic double toGb(double size) {return roundHalfUp(size, D_GB, D_GB); }@Overridepublic double toTb(double size) {return roundHalfUp(size, D_TB, D_GB); }@Overridepublic double toPb(double size) {return roundHalfUp(size, D_PB, D_GB); }@Overridepublic DataSizeConverter upGrade() {return TB;}@Overridepublic DataSizeConverter downGrade() {return MB;}},TB("T") {@Overridepublic double toByte(double size) {return roundHalfUp(size, D_BT, D_TB); }public double toKb(double size) {return roundHalfUp(size, D_KB, D_TB);}@Overridepublic double toMb(double size) {return roundHalfUp(size, D_MB, D_TB);}@Overridepublic double toGb(double size) {return roundHalfUp(size, D_GB, D_TB);}@Overridepublic double toTb(double size) {return roundHalfUp(size, D_TB, D_TB);}@Overridepublic double toPb(double size) {return roundHalfUp(size, D_PB, D_TB);}@Overridepublic DataSizeConverter upGrade() {return PB;}@Overridepublic DataSizeConverter downGrade() {return GB;}},PB("P") {@Overridepublic double toByte(double size) {return roundHalfUp(size, D_BT, D_PB);}@Overridepublic double toKb(double size) {return roundHalfUp(size, D_KB, D_PB);}@Overridepublic double toMb(double size) {return roundHalfUp(size, D_MB, D_PB);}@Overridepublic double toGb(double size) {return roundHalfUp(size, D_GB, D_PB);}@Overridepublic double toTb(double size) {return roundHalfUp(size, D_TB, D_PB);}@Overridepublic double toPb(double size) {return roundHalfUp(size, D_PB, D_PB);}@Overridepublic DataSizeConverter upGrade() {return PB;}@Overridepublic DataSizeConverter downGrade() {return TB;}//本平台PB为最⼤单位不能升级了,所以返回本⾝⼤⼩ @Overridepublic double upGrade(double size) {return size;}};public String getAbbrUnit() {return abbrUnit;}private String abbrUnit;private DataSizeConverter(String abbrUnit) {this.abbrUnit = abbrUnit;}private static final int DURATION = 1024;private static final long D_PB = 1L;private static final long D_TB = D_PB * DURATION;private static final long D_GB = D_TB * DURATION;private static final long D_MB = D_GB * DURATION;private static final long D_KB = D_MB * DURATION;private static final long D_BT = D_KB * DURATION;public double roundHalfUp(double size, long toUnit, long currentUnit) {return BigDecimal.valueOf(size).multiply(new BigDecimal(toUnit)).divide(new BigDecimal(currentUnit)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();}public double toByte(double size) {throw new AbstractMethodError();}public double toKb(double size) {throw new AbstractMethodError();}public double toMb(double size) {throw new AbstractMethodError();}public double toGb(double size) {throw new AbstractMethodError();}public double toTb(double size) {throw new AbstractMethodError();}public double toPb(double size) {throw new AbstractMethodError();}/*** 数据⼤⼩降级* ⽐如是MB,降级为KB* @author YuGuo* @date 2020/11/13 17:00* @param size* @return*/public double downGrade(double size) {return BigDecimal.valueOf(size).multiply(BigDecimal.valueOf(DURATION)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }public DataSizeConverter downGrade() {throw new AbstractMethodError();}public DataSizeConverter upGrade() {throw new AbstractMethodError();}public double upGrade(double size) {return BigDecimal.valueOf(size).divide(BigDecimal.valueOf(DURATION), 2, BigDecimal.ROUND_HALF_UP).doubleValue();}}2.对上⾯的⼯具类扩展package com.model.bo;import com.enmo.dbaas.util.DataSizeConverter;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/*** @ClassName DataSizeBo* @Description* @Author justin* @Date: 2020-11-16 14:28:11*/@Data@AllArgsConstructor@NoArgsConstructorpublic class DataSizeBo {private String size;private DataSizeConverter converter;/*** 获取的size带缩写的单位,如:10G* @author YuGuo* @date 2020/11/16 16:21* @param* @return*/public String getSizeWithAbbrUnit() {return size + converter.getAbbrUnit();}}package com.enmo.dbaas.util;import com.model.bo.DataSizeBo;import java.math.BigDecimal;import java.math.RoundingMode;import java.text.DecimalFormat;/*** @ClassName DataSize* @Description* @Author justin* @Date: 2020-11-13 11:14:55*/public class DataSizeWrapper {private static DecimalFormat df = new DecimalFormat("#.##");private static final int DURATION = 1024;static {df.setRoundingMode(RoundingMode.HALF_UP);}private DataSizeWrapper() {}public static DataSizeBo format(double size, DataSizeConverter converter) {// ⽐1⼩,说明需要降级,⼤单位降⼩单位if (BigDecimal.valueOf(size).compareTo(BigDecimal.valueOf(1)) < 0) {// 说明已经达到最⼩值不能再往下降了if (converter == DataSizeConverter.BYTE) {return new DataSizeBo(df.format(size), converter);}return format(converter.downGrade(size), converter.downGrade());// ⽐1024⼤,说明需要升级,⼩单位升⼤单位} else if (BigDecimal.valueOf(size).compareTo(BigDecimal.valueOf(DURATION)) >= 0) { // 说明已经达到最⼤值不能再往上升了if (converter == DataSizeConverter.PB) {return new DataSizeBo(df.format(size), converter);}return format(converter.upGrade(size), converter.upGrade());}// 在1 <=szie< 1024 说明不需要升级也不需要降级,直接返回return new DataSizeBo(df.format(size), converter);}}。

Python—字符编码转换、函数基本操作

Python—字符编码转换、函数基本操作

Python—字符编码转换、函数基本操作#声明⽂件编码,格式如下:#-*- coding:utf-8 -*-注意此处只是声明了⽂件编码格式,python的默认编码还是unicode字符编码转换:import sysprint(sys.getdefaultencoding()) #查询当前编码s = "你好" #python默认编码为unicodeprint(s.encode("utf-8")) #转换为utf-8编码t = b'\xe4\xbd\xa0\xe5\xa5\xbd' #⼆进制转换为strprint(t.decode())>>>>utf-8 #查询当前编码为utf-8b'\xe4\xbd\xa0\xe5\xa5\xbd' #unicode 转换为utf-8 在python3中默认打印格式为⼆进制格式你好 #转换为strprint(s.encode("utf-8").decode("utf-8").encode("gbk")) #注意encode的时候括号⾥写要转成的编码,decode的时候括号⾥写原始⽂件的编码!>>>>>b'\xc4\xe3\xba\xc3'函数定义: 函数是指将⼀组语句的集合通过⼀个名字(函数名)封装起来,要想执⾏这个函数,只需调⽤其函数名即可特性:1.减少重复代码2.使程序变的可扩展3.使程序变得易维护函数的语法结构:1def greet_user(username): #定义函数名2print("Hello!",username.title(),"!") #函数体3 greet_user("ww")函数的形参与实参1def describe_pet(pet_name,animal_type="dog"): #指定默认值的形参要放在最后⾯,不然会报错2"""显⽰宠物信息"""3print("I have a %s.\nMy %s 's name is %s.\n"%(animal_type,animal_type,pet_name))4 describe_pet("hamster","harry") #位置实参位置要与形参⼀致,此处没有,会变成 harry是宠物类型,hamster变成了宠物名字5 describe_pet(pet_name="ww",animal_type="cat") #关键字实参6 describe_pet(pet_name="ww") #当形参有默认值时,若不给形参传递实参,则默认输出默认值向函数传递实参的⽅式很多,可使⽤位置实参,这要求实参的顺序与形参的顺序相同;也可使⽤关键字实参,其中每个实参都由变量名和值组成;还可使⽤列表和字典。

Python常见字符编码间的转换

Python常见字符编码间的转换

Python常见字符编码间的转换1. 前⾔ Python2.x和Python3.x在字符编码的设置上也有很⼤区别(Python3未来将是主流,所以Python3为主),今天我们就来⼀起学习下。

上⼀篇⽂章⾥已经简述了Python的常见编码了,这⾥就不再赘述了,还不清楚的可以先去看下:2. Unicode 和 UTF-8的爱恨纠葛 U nicode 起到了2个作⽤:1. 直接⽀持全球所有语⾔,每个国家都可以不⽤再使⽤⾃⼰之前的旧编码了,⽤unicode就可以了。

(就跟英语是全球统⼀语⾔⼀样)2. unicode包含了跟全球所有国家编码的映射关系。

Unicode解决了字符和⼆进制的对应关系,但是使⽤unicode表⽰⼀个字符,太浪费空间。

例如:利⽤unicode表⽰"Python"需要12个字节才能表⽰,⽐原来ASCII表⽰增加了1倍。

由于计算机的内存⽐较⼤,并且字符串在内容中表⽰时也不会特别⼤,所以内容可以使⽤unicode来处理,但是存储和⽹络传输时⼀般数据都会⾮常多,那么增加1倍将是⽆法容忍的 为了解决存储和⽹络传输的问题,出现了Unicode Transformation Format,学术名UTF,即:对unicode中的进⾏转换,以便于在存储和⽹络传输时可以节省空间! UTF-8:使⽤1、2、3、4个字节表⽰所有字符;优先使⽤1个字符、⽆法满⾜则使增加⼀个字节,最多4个字节。

英⽂占1个字节、欧洲语系占2个、东亚语系占3个,其它及特殊字符占4个。

UTF-16:使⽤2、4个字节表⽰所有字符;优先使⽤2个字节,否则使⽤4个字节表⽰。

UTF-32:使⽤4个字节表⽰所有字符。

总结:UTF 是为unicode编码设计的⼀种在存储和传输时节省空间的编码⽅案。

3. 字符在硬盘上的存储 ⾸先要明确的⼀点就是,⽆论以什么编码在内存⾥显⽰字符,存到硬盘上都是2进制(0b是说明这段数字是⼆进制,0x表⽰是16进制。

PB全角和半角字符的转换解决方案

PB全角和半角字符的转换解决方案

PB中全角字符和半角字符之间的转换相关解决方案一、将字符串中的半角字符转换成全角字符(函数)//函数功能:将字符串中的半角字符转换成全角字符//入口参数:in_str——准备进行转换的半角字符串类型string//返回值:转换成功的全角字符串类型stringstring c_return=""long l0,l1,l2,l3,l4,i,c_leng,l_asci=1c_leng=len(in_str)do while i<=c_lengl_asc=asc(in_str)if l_asc<=128 thenif l_asc>=33 and l_asc<=126 thenl1=int((l_asc+41856)/(16*16*16))l0=mod((l_asc+41856),(16*16*16))l2=int(l0/(16*16))l0=mod(l0,(16*16))l3=int(l0/16)l4=mod(l0,16)c_return=c_return+char(l1*16+l2)+char(l3*16+l4)elsec_return=c_return+left(in_str,1)end ifin_str=replace(in_str,1,1,"")i=i+1elsec_return=c_return+left(in_str,2)in_str=replace(in_str,1,2,"")i=i+2end ifloopreturn c_return二、中英文输入法的切换及全角半角切换切换中英文输入法及全角/半角?问题描述:如何切换中英文输入法及全角/半角、中英文字符等?解决方案:1、声明外部函数:function boolean ImmSimulateHotKey (UnsignedLong hWnd,UnsignedLong dwHotKeyID) library "IMM32.dll"function unsignedlong GetKeyboardLayout (unsignedlong wLayout)library "user32.dll"function boolean ImmIsIME(unsignedLong hklKeyboardLayout)library "IMM32.DLL"2、在一个按钮里写:long ll_hwndll_hwnd = handle(sle_1)If not ImmIsIME(GetKeyboardLayout(0)) ThenImmSimulateHotKey(ll_hwnd,16)End IfImmSimulateHotKey(ll_hwnd,17)3、测试:运行后在TEXT中先输入逗号,均为半角,再点按钮后再输入逗号,均为全角三、自动切换输入法比如把焦点切换到一个编辑框时,如何自动切换到你设置的输入法。

PB全角和半角字符的转换解决方案

PB全角和半角字符的转换解决方案

PB中全角字符和半角字符之间的转换相关解决方案一、将字符串中的半角字符转换成全角字符(函数)//函数功能:将字符串中的半角字符转换成全角字符//入口参数:in_str——准备进行转换的半角字符串类型string//返回值:转换成功的全角字符串类型stringstring c_return=""long l0,l1,l2,l3,l4,i,c_leng,l_asci=1c_leng=len(in_str)do while i<=c_lengl_asc=asc(in_str)if l_asc<=128 thenif l_asc>=33 and l_asc<=126 thenl1=int((l_asc+41856)/(16*16*16))l0=mod((l_asc+41856),(16*16*16))l2=int(l0/(16*16))l0=mod(l0,(16*16))l3=int(l0/16)l4=mod(l0,16)c_return=c_return+char(l1*16+l2)+char(l3*16+l4)elsec_return=c_return+left(in_str,1)end ifin_str=replace(in_str,1,1,"")i=i+1elsec_return=c_return+left(in_str,2)in_str=replace(in_str,1,2,"")i=i+2end ifloopreturn c_return二、中英文输入法的切换及全角半角切换切换中英文输入法及全角/半角?问题描述:如何切换中英文输入法及全角/半角、中英文字符等?解决方案:1、声明外部函数:function boolean ImmSimulateHotKey (UnsignedLong hWnd,UnsignedLong dwHotKeyID) library "IMM32.dll"function unsignedlong GetKeyboardLayout (unsignedlong wLayout)library "user32.dll"function boolean ImmIsIME(unsignedLong hklKeyboardLayout)library "IMM32.DLL"2、在一个按钮里写:long ll_hwndll_hwnd = handle(sle_1)If not ImmIsIME(GetKeyboardLayout(0)) ThenImmSimulateHotKey(ll_hwnd,16)End IfImmSimulateHotKey(ll_hwnd,17)3、测试:运行后在TEXT中先输入逗号,均为半角,再点按钮后再输入逗号,均为全角三、自动切换输入法比如把焦点切换到一个编辑框时,如何自动切换到你设置的输入法。

PB中实现将汉字转换为拼音首字母的方法

PB中实现将汉字转换为拼音首字母的方法

PB中实现将汉字转换为拼音首字母的方法华逢兆【摘要】在许多应用系统中,按拼音首字母进行数据检索比较方便快捷,本文主要探讨在PowerBuilder中,将汉字转换为拼音首字母的方法。

【期刊名称】《科技风》【年(卷),期】2015(000)011【总页数】2页(P211-212)【关键词】PowerBuilder;GB2312- 80;一级汉字;二级汉字【作者】华逢兆【作者单位】安顺职业技术学院信息工程系,贵州安顺 561000【正文语种】中文许多应用系统中都涉及到汉字检索问题,比如我院学生收费管理系统中一般按姓名进行检索,但直接输入姓名汉字,输入速度慢,不方便。

如果能按姓名拼音缩写(拼音首字母)进行检索,可以提高工作效率,使用更方便。

这需要在录入学生姓名时,能将输入的姓名自动转换为拼音首字母。

一、实现原理汉字在计算机中的处理,以GB 2312-80(《信息交换用汉字编码字符集·基本集》)标准为基础。

GB2312-80 标准共收录6763 个汉字,其中一级汉字3755 个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682 个字符。

GB2312 中对所收汉字进行了“分区”处理,每区含有94 个汉字/符号。

这种表示方式也称为区位码。

01-09 区为特殊符号。

16-55区为一级汉字,按拼音排序。

56-87 区为二级汉字,按部首笔画排序。

10-15 区及88-94 区保留。

一级汉字由于按拼音排序,它的转换比较简单,可以通过确定汉字处于哪一个区间,转换为相应的拼音首字母。

二级汉字是按字母笔画排序,它的转换可通过在程序中查表来实现,但首先要做好二级汉字拼音首字母表。

二、实现方法三、结束语本文的程序在PB 9.0 下调试通过,应用于我院财务收费系统中,能转换GB2312-80 中的一二级汉字。

[参考文献][1]李勇等编著.PowerBuilder8.0彻底研究.北京:中国铁道出版社.[2]GB2312-80字符编码代表表.。

pb 十六进制转byte

pb 十六进制转byte

在计算机科学中,十六进制(Hex)是一种表示数据的方法,由0-9,A-F组成,字母不区分大小写,与十进制的对应关系是:0-9对应0-9,A-F对应10-15。

一个字节(byte)为8个二进制位,因此,一个字节可表示为两个十六进制数字。

要将十六进制转换为字节,可以采用以下方法:
方法一:可以使用`Byte.parseByte()`方法,将十六进制字符串转换为字节类型。

例如:`Byte.parseByte("FD", 16)`,其中"FD"为十六进制字符串,16表示转换的进制为十六进制。

方法二:可以使用`Integer.parseInt()`方法或`Integer.valueOf()`方法,将十六进制字符串转换为整数类型,然后使用`byteValue()`方法将整数类型转换为字节类型。

例如:`(byte)Integer.parseInt("9D", 16)`或`Integer.valueOf("9D", 16).byteValue()`。

方法三:可以使用十六进制表示法,直接将十六进制数转换为字节类型。

例如:`(byte)0xFD`,其中"0xFD"为十六进制数。

请注意,转换结果可能存在溢出的情况,即结果超出了字节类型的范围(-128~127)。

在这种情况下,需要根据具体情况进行处理。

Python编码类型转换方法详解

Python编码类型转换方法详解

Python编码类型转换⽅法详解本⽂实例讲述了Python编码类型转换⽅法。

分享给⼤家供⼤家参考,具体如下:1:Python和unicode为了正确处理多语⾔⽂本,Python在2.0版后引⼊了Unicode字符串。

2:python中的print虽然python内部需要将⽂本编码转换为unicode编码来处理,⽽终端显⽰⼯作则由传统的Python字符串完成(实际上,Python 的print语句根本⽆法打印出双字节的Unicode编码字符)。

python的print会对输出的unicode编码(对其它⾮unicode编码,print会原样输出)做⾃动的编码转换(输出到控制台时),⽽⽂件对象的write⽅法就不会做,因此,当⼀些字符串⽤print输出正常时,write到⽂件确不⼀定和print的⼀样。

在linux下是按照环境变量来转换的,在linux下使⽤locale命令就可以看到。

print语句它的实现是将要输出的内容传送了操作系统,操作系统会根据系统的编码对输⼊的字节流进⾏编码。

>>>str='学习python'>>> str' e5 ad a6 e4 b9 a0python' #asII编码>>> print str学习python>>> str=u'学习python'>>> str ####unicode编码' e5u ad a6 e4 b9 a0python'3: python中的decode将其他字符集转化为unicode编码(只有中⽂字符才需要转换)>>> str='学习'>>> ustr=str.decode('utf-8')>>> ustru'\u5b66\u4e60'这样就对中⽂字符进⾏了编码转换,可⽤python进⾏后续的处理;(如果不转换的话,python会根据机器的环境变量进⾏默认的编码转换,这样就可能出现乱码)4:python中的encode将unicode转化为其它字符集>>> str='学习'>>> ustr=str.decode('utf-8')>>> ustru'\u5b66\u4e60'>>> ustr.encode('utf-8')' e5 ad a6 e4 b9 a0'>>> print ustr.encode('utf-8')学习更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Python程序设计有所帮助。

pb url decode encode 算法

pb url decode encode 算法

一、介绍pb url decode encode算法是一种用于处理URL参数编码和解码的算法。

URL参数编码指的是把URL中的特殊字符转换成特定的编码格式,以便在网络上进行传输和解析。

而URL参数解码则是把编码后的URL参数转换为原始的字符格式。

pb url decode encode算法可以帮助我们实现对URL参数的编码和解码操作。

二、URL参数编码在URL中,一些特殊字符比如空格、问号、井号等,需要进行编码处理才能被正常传输。

pb url decode encode算法采用了一种特定的编码格式,将这些特殊字符转换成其他字符,以便在URL中传输和解析。

空格会被转换成“20”来表示。

这种编码方式保证了URL的完整性和可靠性。

三、URL参数解码当接收到一个编码后的URL参数时,我们需要对其进行解码操作,还原为原始的字符串格式。

pb url decode encode算法提供了解码的功能,可以将编码后的URL参数转换为原始的字符格式。

这样我们就可以正确解析URL参数,并进行相应的处理。

四、pb url decode encode算法的实现pb url decode encode算法采用了一种基于ASCII字符集的编码方式,将特殊字符转换成特定的格式。

空格会被编码成“20”,问号会被编码成“3F”等。

而解码操作则是将这些编码格式转换回原始的字符格式。

这种算法的实现简单高效,能够很好地满足URL参数编解码的需求。

五、使用pb url decode encode算法的场景在实际的开发中,对URL参数进行编码和解码是非常常见的操作。

特别是在Web开发和移动应用开发中,经常需要处理URL参数传递和解析。

pb url decode encode算法可以帮助我们轻松地实现这些操作,提高开发效率和数据传输的可靠性。

六、pb url decode encode算法的优势1. 算法简单高效,实现成本低。

2. 支持对各种特殊字符进行编码和解码操作,能够满足不同的需求。

pb 十六进制转byte -回复

pb 十六进制转byte -回复

pb 十六进制转byte -回复十六进制转byte是一种常见的数据转换过程,它将十六进制数字表示的数据转换为byte类型的数据。

在许多计算机应用程序中,数据以十六进制形式进行表示,而在实际的数据处理和操作中,我们通常需要将这些数据转换为byte类型的数据进行处理。

下面,我将一步一步地回答关于十六进制转byte的问题,解释其原理和方法。

第一步,了解十六进制和byte的概念和表示方法。

十六进制是一种基数为16的数制,使用0-9和A-F十个字符表示0-15的数字。

byte是计算机中的一种数据类型,它通常由8个二进制位组成,可以表示0-255的整数值。

第二步,将十六进制数按照位数分组,每组包含四个二进制位。

例如,如果我们有一个十六进制数"3A7B",我们可以将其分为四组:"3"、"A"、"7"和"B"。

第三步,将每个十六进制数转换为二进制数。

根据十六进制的规则,我们知道"A"表示的十进制数是10,其二进制表示为"1010"。

同样地,"B"表示的十进制数是11,其二进制表示为"1011"。

对于其他的数字,我们可以使用类似的方法将其转换为二进制数。

第四步,将每个二进制数转换为一个字节(byte)。

字节是计算机中的基本数据单元,通常由8个二进制位组成。

我们可以根据二进制数的位数,对其进行补零或者截断,使其正好占据一个字节的空间。

例如,如果一个二进制数只有4位,我们可以在左侧补零,使其成为一个八位的字节。

第五步,将每个字节转换为对应的十进制数。

由于byte类型的数据可以表示0-255的整数值,我们可以将每个字节对应的二进制数看作是一个8位的二进制整数,然后将其转换为对应的十进制数。

例如,对于二进制数"1010 1011",我们可以将其转换为对应的十进制数"171"。

python字符编码与转码

python字符编码与转码

python字符编码与转码注意:unicode和utf-8之间不需要转换,可以直接互相打印,GBK如果需要和utf-8之间进⾏转换⼀定要通过unicodepycharm的默认编码如果不指定则会取系统的编码集,windows是默认gbk的转换编码只在2进制⽂件解码编码中必须指定,如果⽂本⽂件指定encoding则会报错s="你好"#python 默认的编码为unicode因此,所有的字符串的编码均为unicodeprint(s.encode("gbk"))#编码后,字符串的数据类型转变为2进制,打印的结果就是⼆进制的编码print(s.encode("gbk"))print(s.encode("utf-8"))print(s.encode("utf-8").decode("utf-8").encode("gb2312"))#把utf-8编码先解码为unicode(写utf-8表⽰原编码为utf-8),然后重新编码为gb2312输出:b'\xc4\xe3\xba\xc3'b'\xe4\xbd\xa0\xe5\xa5\xbd'b'\xc4\xe3\xba\xc3'/luotianshuai/articles/5735051.html在2.7环境中咱们要写上这⼀⾏#-*- coding:utf-8 -*- 为什么我们要加这⼀⾏呢?这⼀样的意思是置顶编码类型为utf-8编码!⾸先在看这个问题之前,咱们是否曾想过⼀个问题?为什么我们可以在显⽰器上能看到这些⽂字、数字、图⽚、字符、等等信息呢?⼤家都知道计算机本⾝只能识别 0 1 的组合,他们是怎么展⽰这些内容的呢?我们怎么和计算机去沟通呢?如果我们使⽤0 1 的组合和计算机沟通你还能看到这些内容吗?还有⼀个问题就是01的组合对于咱们说⼏乎看不懂对吧!那怎么办?如何让计算机理解我们的语⾔,并且我们能理解计算机的语⾔呢?举个⽐较形象的例⼦,中英⽂词典对照表,这样我们就可以把中英⽂进⾏互相的翻译了呢?对不对!同理计算机也是这样的他需要⼀个标准的对照关系,那么这个标准最早叫什么呢?ASCII表ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于的⼀套电脑编码系统,主要⽤于显⽰现代和其他语⾔。

编码编码的转化

编码编码的转化

编码编码的转化什么是字符编码 因为计算机是外国⼈创造的所以计算机最开始只能识别最开始的基本数字(毕竟是外国⼈创造的所以最开始是不⽀持伟⼤的汉语,所以everybody努⼒学习吧创造我们⾃⼰的伟⼤的技术) 计算机要想⼯作必须通电,也就是说‘电’驱使计算机⼲活,⽽‘电’的特性,就是⾼低电平(⾼低平即⼆进制数1,低电平即⼆进制数0),也就是说计算机只认识数字 很明显,我们平时在使⽤计算机时,⽤的都是⼈类能读懂的字符(⽤⾼级语⾔编程的结果也⽆⾮是在⽂件内写了⼀堆字符),如何能让计算机读懂⼈类的字符? 必须经过⼀个过程: 字符--------(翻译过程)------->数字 这个过程实际就是⼀个字符如何对应⼀个特定数字的标准,这个标准称之为字符编码 以下两个场景下涉及到字符编码的问题: 1:⼀个python⽂件中的内容是由⼀堆字符组成的(python⽂件未执⾏的时候) 2:python 中的数据类型,字符串是由⼀串字符组成的(python⽂件执⾏的时候)字符编码的发展史阶段⼀:现代计算机起源于美国,最早诞⽣也是基于英⽂考虑的ASCII ASCII:⼀个Bytes代表⼀个字符(英⽂字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表⽰0-2**8-1种变化,即可以表⽰256个字符 ASCII最初只⽤了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英⽂字符/键盘的所有其他字符) 后来为了将拉丁⽂也编码进了ASCII表,将最⾼位也占⽤了阶段⼆:为了满⾜中⽂,中国⼈定制了GBK GBK:2Bytes代表⼀个字符 为了满⾜其他国家,各个国家纷纷定制了⾃⼰的编码 ⽇本把⽇⽂编到Shift_JIS⾥,韩国把韩⽂编到Euc-kr⾥阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语⾔混合的⽂本中,显⽰出来会有乱码。

unique:对于python2各字节⼀个字符 python3就是4位⼀个字符于是产⽣了unicode, 前期统⼀⽤2Bytes代表⼀个字符, 2**16-1=65535,可代表6万多个字符,后期使⽤4各字节代表⼀个字符因⽽兼容万国语⾔但对于通篇都是英⽂的⽂本来说,这种编码⽅式⽆疑是多了⼀倍的存储空间(⼆进制最终都是以电或者磁的⽅式存储到存储介质中的)于是产⽣了UTF-8,对英⽂字符只⽤1Bytes表⽰,对中⽂字符⽤3Bytes需要强调的⼀点是:unicode:简单粗暴,所有字符都是4Bytes,优点是字符->数字的转换速度快,缺点是占⽤空间⼤utf-8:精准,对不同的字符⽤不同的长度表⽰,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表⽰在python3 中str的类型是unicode(万国码)如果str'想要显⽰出来必须是要转化的那么我们需要把str转化为⾮unicode类型(bytes)的字符串在python3中就是默认为unicode的形式的所以我们必须转化bytes才能显⽰出来就好⽐你发送⼀段python代码那么⾥⾯的字符串你要先转化为Unicode类型的 python解释器才能识别发送然后接收后为了显⽰出来那么 python解释器再编码成⾮Unicode类型的才能显⽰出来这就是编码的过程我们编码需要⽤encode>>> s= 'alex'>>> sl = s.encode('utf-8') #编码 str-->bytes>>>s= 'hello girl'sl = s.encode('utf-8') #str----->utf-8print(sl)如果我们想要把⾮Unicode类型的先转化为Unicode 那么⽤decode如果⼀个utf-8要转换为gbk不能直接转化需要⽤decode先转换成unicode 然后再⽤encode转换为gbks = 'alex's1 = s.encode('gbk') # 转化为gbks2 = s1.decode('gbk') # gbk转化为unicodes = s2.encode('utf-8') # unicode 转化为utf-8print(s.decode('UTF-8')) # 然后解码转化为Unicode 因为计算机只是别unicode所以必须转化为unicode类型的才能显⽰计算机所显⽰的所有⽂字数字都是unicode类型的传输的时候必须要线转码,转为可以传输的字节码才能和电信号交互进⾏传递。

python字节与字符串转换编解码格式

python字节与字符串转换编解码格式

python字节与字符串转换编解码格式1、如果没有设置字符串编码格式,那么将采⽤系统默认编码格式name = 'laogaoyang'# 采⽤系统默认编码格式nameBytes = name.encode('utf-8') # 先将 name 解码(采⽤系统默认格式),然后⽤ 'utf-8' 编码nameStr = nameBytes.decode('utf-8') # ⽤什么格式编码就需要⽤同样格式去解码,否则出错说明:name.encode('utf-8') 此处将 name 重新编码为 'utf-8',要重新编码⾸先要解码,此处并没有指明解码⽅式,那么将采⽤系统的默认解码格式(编解码格式相同,不会出错)2、主动设置字符串编码格式为 'utf-8',假设系统编解码格式为 'ascii'# -*- coding: utf-8 -*-name = 'laogaoyang'# 采⽤指定的编码格式 'utf-8'nameBytes = name.encode('utf-8') # 这⾥出错了说明:上⼀个例⼦编码成 'utf-8' 是正常的,因为编解码格式相同此处编码采⽤ 'utf-8'格式,并没有指明解码⽅式,那么将采⽤系统的默认解码格式(即 'ascii', 编解码格式不相同,出错),修正⽅法有两种,如下所⽰明确指定解码格式# -*- coding: utf-8 -*-name = 'laogaoyang'# 采⽤指定的编码格式为 'utf-8'nameBytes = name.decode('utf-8').encode('utf-8')修改默认解码格式# -*- coding: utf-8 -*-import syssys.setdefaultencoding('utf-8')name = 'laogaoyang'# 采⽤指定的编码格式 'utf-8'nameBytes = name.encode('utf-8')。

pb替换转义字符方法

pb替换转义字符方法

pb替换转义字符方法在编程过程中,我们经常会遇到需要处理特殊字符的情况。

而有些特殊字符在代码中会被解释成其他含义,导致程序出现错误或不符合预期的结果。

为了解决这个问题,我们可以使用pb替换转义字符的方法。

我们需要了解什么是转义字符。

转义字符是一种特殊的字符序列,用于表示一些特殊的字符或者在字符串中表示一些特殊的含义。

常见的转义字符包括反斜杠(\),单引号('),双引号("),换行符(\n),制表符(\t)等等。

在使用pb替换转义字符的方法之前,我们先来看一下转义字符的作用和用法。

例如,如果我们想在字符串中表示一个双引号,但又不希望它被解释成字符串的结束符号,我们可以使用转义字符来做到这一点。

代码示例如下:```String str = "这是一个\"双引号\"";System.out.println(str);```运行结果为:```这是一个"双引号"```在这个例子中,我们使用了转义字符\"来表示一个双引号,而不是字符串的结束符号。

这样,输出结果就能正确显示双引号了。

接下来,我们来介绍如何使用pb替换转义字符的方法。

pb是一个常用的编程语言,它提供了一个特殊的函数来实现这个功能。

该函数的原型如下:```public static String replaceEscapeCharacters(String str)```该函数接收一个字符串作为参数,然后将其中的转义字符替换成对应的特殊字符。

例如,如果字符串中含有转义字符\",则替换成双引号;如果字符串中含有转义字符\n,则替换成换行符。

下面是一个使用pb替换转义字符的例子:```String str = "这是一个\\n换行符";String result = replaceEscapeCharacters(str);System.out.println(result);```运行结果为:```这是一个换行符```在这个例子中,我们首先定义了一个包含转义字符\n的字符串。

python学习之编码转换和pycharm设置

python学习之编码转换和pycharm设置

python学习之编码转换和pycharm设置⼀编码转换unicode 可以编译成 UTF-U GBK即#!/usr/bin/env python# _*_ coding:utf-8 _*___author__ = 'Administrator'a='⽅' #默认是utf-8a_unicod=a.decode('utf-8') # decode是解码成unicode 括号是脚本内容的默认编码即:将脚本内容的utf-8解码成unicodea_gbk=a_unicod.encode('gbk') #encode是编码,将unicode的编码内容编码成指定的,这⾥是gbkprint(a_gbk) #⽤于终端打印#print(u"⽅") #3⾥⾯是字符串 2⾥⾯是unicode# 3版本直接将utf-8编码成GBK 不需要先转成unicode了,因为3没有了E:\py_test\s2_py>python3 test.pyTraceback (most recent call last):File "test.py", line 6, in <module>a_unicod=a.decode('utf-8') # decode是解码成unicode 括号是脚本内容的默认编码即:将脚本内容的utf-8解码成unicode AttributeError: 'str' object has no attribute 'decode'四 pycharm 安装配置 file-setings-editor- file && file encode template 输⼊ #!/usr/bin/env python# _*_ coding:utf-8 _*___author__ = 'superfang'五 pycharm 快捷键 ctrl+/ 批量注释 shift+⽅向键选中 shift+tab 向左tab。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
lpWideCharStr:指向接收被转换字符串的缓冲区。
cchWideChar:指定由参数lpWideCharStr指向的缓冲区的字符个数。若此值为零,函数返回缓冲区所必需的宽字符数,在这种情况下,lpWideCharStr中的缓冲区不被使用。
返回值:
如果函数运行成功,并且cchWideChar不为零,返回值是由lpWideCharStr指向的缓冲区中写入的宽字符数;
lpDefaultChar和lpUsedDefaultChar都设为NULL,函数会更快一些。
返回值:
如果函数成功,且cbMultiByte非0,返回写入lpMultiByteStr的字节数(包括字符串结尾的null);cbMultiByte为0,则返回转换所需 字节数。函数失败,返回0。
FUNCTION long MultiByteToWideChar(uint CodePage, ulong dwFlags, ref blob lpMultiByteStr,long cchMultiByte,ref blob lpWideCharStr, long cchWideChar) LIBRARY "kernel32.dll"
dwFlags: 指定是否转换成预制字符或合成的宽字符,对控制字符是否使用像形文字,以及怎样处理无效字符。
lpMultiByteStr:指向将被转换字符串的字符。
cchMultiByte:指定由参数lpMultiByteStr指向的字符串中字节的个数。如果lpMultiByteStr指定的字符串以空字符终止,可以设置为-1(如果字符串不是以空字符中止,设置为-1可能失败,可能成功),此参数设置为0函数将失败。
cchWideChar: 待转换宽字符串的长度,-1表示转换到字符串结尾。
lpMultiByteStr: 接收转换后输出新串的缓冲区。
cbMultiByte: 输出缓冲区大小,如果为0,lpMultiByteStr将被忽略,函数将返回所需缓冲区大小而不使用lpMultiByteStr。
lpDefaultChar: 指向字符的指针, 在指定编码里找不到相应字符时使用此字符作为默认字符代替。如果为NULL则使用系统默认字符。
PB中字符编码转换[ansi, UTF8, Unicode] API: WideCharToMultiByte() MultiByteToWideChar ()函数运用
由于项目的需要和服务器进行XML格式的报文交互。可是服务器返回的报文是UTF8格式的,PB开发工具目前的只支持ANSI编码格式。经过多方的查找资料以及不断的实验调试,终于完成了。
PB中的函数声明:
FUNCTION long WideCharToMultiByte(uint CodePage, ulong dwFlags, ref blob lpWideCharStr, long cchWideChar, ref blob lpMultiByteStr, long cbMultiByte, long lpDefaultChar,long lpUsedDefaultChar) Library "kernel32.dll"
int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr,int cchMultiByte, LPWSTR lpWideCharStr,int cchWideChar );
CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。[说白了就unicode需要转换成什么字符编码]: (我想最常用的应该是CP_ACP(0)和CP_UTF8(65001) )
CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值[说白了就是什么字符编码转换成unicode编码。常用CP_ACP(0)和CP_UTF8(65001)
dwFlags: 指定如何处理没有转换的字符,但不设此参数函数会运行的更快一些,我都是把它设为0。
lpWideCharStr: 待转换的宽字符串。
若想获得更多错误信息,请调用GetLastError函数。它可以返回下面所列错误代码: ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS; ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。
注意:指针lpMultiByteStr和lpWideCharStr必须不一样。如果一样,函数将失败,GetLastError将返回ERROR_INVALID_PARAMETER的值。
对于要求此参数为NULL的dwFlags而使用此参数,函数将失败返回并设置错误码ERROR_INVALID_PARAMETER。
lpUsedDefaultChar:开关变量的指针,用以表明是否使用过默认字符。对于要求此参数为NULL的dwFlags而使用此参数,函数将失败返回并设置错误码ERROR_INVALID_PARAMETER。
// 参数:
// reference blob ablb_unicode
// reference blob ablb_UTF8
//--------------------------------------------------------------------
// 返回值: long 转换后的字节数
// 修改历史:
//
//======================================
long ll_Unicode_Size, ll_UTF8_Size
ll_Unicode_Size = len(ablb_unicode)
if ll_Unicode_Size < 1 then
return 0
end if
ll_Unicode_Size = ll_Unicode_Size/2
//获取转换需要的字节数
ll_UTF8_Size = WideCharToMultiByte(CP_UTF8, 0, ablb_unicode, ll_Unicode_Size, ablb_utf8, 0, 0, 0)
字符编码格式在这里就不做详细的叙述,大家可以自己到网上去参考相关文档。
=========================================API 参考===============================================
利用windows系统自带的API函数进行转换,附带函数参数说明,如果还需要更详细的资料可以网上搜索:
MultiByteToWideChar 中 lpWideCharStr, cchWideChar 两个参数,看参考文档是要设置为NULL值,但是在PB里面调用的话一定要变成0,要是也是null执行,函数就返回0,报参数错误。。。原因未知。。
还有就是常识: PB long型才是对应系统API的integer整型,所以声明的时候要注意了。
//代码在PB9,window7 64bit 测试通过,对代码有疑问的可以发送邮件进行咨询xiedaolin2000@
//-----------------------------------------of_unicode_utf8-----------------------------------------------------------------
int WideCharToMultiByte(UINT CodePage,DWORD dwFlags,LPWSTR lpWideCharStr,int cchWideChar,LPCSTR lpMultiByteStr,int cchMultiByte,LPCSTR lpDefaultChar,PBOOL pfUsedDefaultChar);
//--------------------------------------------------------------------
// 作者: xiedaolin 日期: 2012.12.13
//--------------------------------------------------------------------
if ll_UTF8_Size < 1 then
return 0
end if
ablb_utf8 = Blob(space(ll_UTF8_Size))
ll_UTF8_Size = WideCharToMultiByte(CP_UTF8, 0, ablb_unicode, ll_Unicode_Size, ablb_utf8, ll_UTF8_Size, 0, 0)
// 函数: n_cst_utilities::of_unicode_utf8()
//--------------------------------------------------------------------
// 描述: Unicode编码转换为UTF8编码
//--------------------------------------------------------------------
如果函数运行成功,并且cchMultiByte为零,返回值是接收到待转换字符串的缓冲区所需求的宽字符数大小。
如果函数运行失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
它可以返回下面所列错误代码:ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。
相关文档
最新文档