`
周禄康
  • 浏览: 161081 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

字符编码(2)——Base64,ANSI

 
阅读更多

Base64是什么?

Base64编码的用途是为了传输和传输安全(其实并不太安全)。

它的算法是:每3个字节(每字节8bit),转换为46bit的字节(一个字节应该是8bit,所以前2位补0),然后每个6位前2位(高位)被2个零。例如:

xxxxxxxx yyyyyyyy xxxxyyyy这里转换前的3个字节,然后,每6位分到一个字节中:

xxxxxx xxyyyy yyyyxx xxyyyy

然后高位补0

00xxxxxx 00xxyyyy 00yyyyxx 00xxyyyy

其中xy是二进制的01,然后再按base64表进行替换(base64,基本的64个码,=号不在其内)

 

0 A

16 Q

 32 g

 48 w        

1 B

 17 R

 33 h

 49 x

2 C

 18 S

 34 i

 50 y

3 D

 19 T

 35 j

 51 z

4 E

 20 U

 36 k

 52 0

5 F

 21 V

 37 l

 53 1

6 G

 22 W

 38 m

 54 2

7 H

 23 X

 39 n

 55 3

8 I

 24 Y

 40 o

 56 4

9 J

 25 Z

 41 p

 57 5

10 K

 26 a

 42 q

 58 6

11 L

 27 b

 43 r

 59 7

12 M

 28 c

 44 s

 60 8

13 N

 29 d

 45 t

 61 9

14 O

 30 e

 46 u

 62 +

15 P

 31 f

 47 v

 63 /

 

从码表中可以得知,base64编码后的字串只包含在小写字母,数字,还有+/这2个特殊字符。

还有一些扩展的base64用法。例如用于url传递的其中把+号和左斜线换成了*-

现在以Hello这个单词来测试一下,之前,先通过.net提供的base64转换方法得到它的base64编码。

 

public static string Base64Encoding(this string selfChar,Encoding encoding)

    
byte[] bb = selfencoding.GetBytes(selfChar);
    
return Convert.ToBase64String(bb);
}

 

Ascii编码环境下

Hello这个单词有5个字母,就是5个字节,那么可以把它分为Hel lo两部分。第一部分的Hel3个字节,它的二进制格式为(可以查ascii表,也可以由上一篇中给出的方法求):010010000110010101101100

然后分为46位:010010 000110 010101 101100

然后高位补000010010 00000110 00010101 00101100,然后换算为10进制为18 6 21 44

然后与码表对应替换:SGVs

 

下边对后2个字节进行编码。因为base64要求8*3——6*4,然后才进行下一步计算。这里只有2个字节,那应该对其补,补就是用=号来替换。

开始:lo的二进制为0110110001101111

因为不够24位,所以分为36位字节011011 000110 111100

011011 000110 11110010进制数为:27 6 60,然后再补一个=号就是

bG8=

与上边的连起来就是SGVs bG8=

 

在程序中验证,这个是正确的。

 

再做一个汉字语句的base64编码:赵。

utf-8编码下,它的二进制是:111010001011010110110101

它有3个字节,分为4个字节:111010 001011 010110 110101,补000111010 00001011 00010110 00110101

10进制是:58 11 22 53

码表:6LW1

 

GB2312环境下的64位编码是怎样的?

字的gb2312编码环境下的字节有2个,它的二进制位是:1101010111010100,分为6位的:

110101 011101 010000

对应的10进制是:53 29 16,对应码表是1dQ,然后补=号就是

1dQ=

 

Ascii环境下的64位编码是怎样的?

字不在Ascii码内(ascii127之内)。那么对于编码环境下不存在的字符怎么样处理呢?

ascii环境下,任何大于127的,即U+007Funicode编码127的),则由ascii的问号替换。

然后,问号在unicode值下是63Ascii下也是,这是10进制数),63的二进制是:111111。这是一个字节(Base64编码算法,要补齐3个字节,所以最后要加2个等号),它应该是:00111111,然后每6位分一字节:001111 110000

不足的在后边补0,这个补06位变8位补不是一样的概念。那么这两个8位的10进制数是:

15 48,对应码表就是Pw

然后还要加上2个等号==

最后变成了Pw==

 

ANSI

American National Standards InstituteANSI——美国国家标准局)

为使计算机支持更多语言,通常使用 0x80—0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

分享到:
评论

相关推荐

    c#中 base64字符串与普通字符串互转

    在C#编程语言中,Base64是一种用于将二进制数据编码为ASCII字符串的机制,以便在不支持二进制传输的系统(如电子邮件)中传输。Base64编码可以将任何二进制数据转换为可打印的字符,包括图片、文件和其他非文本数据...

    易语言汇编base64编码

    1. **Base64解析**:接收Base64编码的字符串,根据Base64字符集将每个字符转换回6位的二进制数。 2. **组合二进制数据**:将4个6位的二进制数组合成3个8位的字节,注意需要处理末尾的填充字符"="。 3. **数据恢复*...

    labview 图片缩放 base64编码base64解码

    2. **Base64编码**: Base64是一种用于将二进制数据转换为可打印字符的编码方式,常用于在电子邮件等文本环境中传输非ASCII字符。在LabVIEW中,可以使用字符串函数来实现Base64编码。首先,你需要将图像数据转换为...

    js对字符串进行base64转码/解码

    2. **循环解码**:逐个字符处理输入字符串,并将其从Base64编码还原为原始数据。 3. **特殊字符处理**:处理填充符“=”的情况。 #### 三、Unicode转UTF-8 由于JavaScript内部使用的是Unicode编码,因此需要一个...

    BASE64编码方法

    BASE64是一种广泛用于网络数据传输和存储的编码方式,它将任意二进制数据转换成可打印的ASCII字符序列。这种方法最初被设计用来在电子邮件系统中传输非ASCII字符,现在则被应用于各种场景,如在HTTP头中传输图像数据...

    将字符编码为Base64编码

    ' =========================...' 功能: 将字符编码为Base64编码 xiaomabuhei=>eGlhb21hYnVoZWk= ' [StrA] 预备编码的字符 ' ======================================================================================

    Base64文本字符串编码解码加密解密双向解析工具

    Base64是一种在互联网上广泛使用的编码方式,用于将二进制数据转化为可打印的ASCII字符,以便在不支持二进制传输的协议(如电子邮件)中传递。它基于64个可打印字符来表示二进制数据,这些字符包括大小写字母、数字...

    js对图片base64编码字符串进行解码并输出图像示例

    需要注意的是,这段代码没有提供完整的Base64解码逻辑,实际的`decodeBase64`函数需要实现Base64编码的解码算法,这通常涉及到将Base64字符映射回它们代表的二进制值。 总的来说,这个示例展示了JavaScript在处理二...

    PB关于字符进制数转化及base64加密、解密,nvo_base64.sru

    Base64是一种编码方式,常用于将二进制数据转化为可打印的ASCII字符,便于在网络传输中使用。在PowerBuilder中,我们可以使用第三方库或自定义函数来实现Base64加密。加密过程包括将原始数据分组、每个6位转换成...

    base64、ANSI、UTF-8、Unicode解析小工具

    标题中的“base64、ANSI、UTF-8、Unicode解析小工具”指的是一个软件工具,这个工具的主要功能是处理和解析四种不同的字符编码格式:Base64编码、ANSI编码、UTF-8编码以及Unicode编码。让我们逐一深入探讨这些编码...

    base64 加解码 base64转hex Base64转图片 图片转Base64工具,比网上其它的方便好用,支持大于1M内容

    2. **Base64解码**:将Base64字符串还原为其原始的二进制数据。这个过程是编码的逆操作,使得接收方能够正确解析接收到的Base64字符串。 3. **URL编码**:Base64编码后的字符串可能包含URL不友好的字符,如"+"和"/...

    base64编码解码离线工具

    Base64编码是一种在网络上传输二进制数据时常用的编码方式,它将任意二进制数据转换成可打印的ASCII字符序列。这种编码方法最初是为了在电子邮件系统中传输非ASCII字符而设计的,如今在很多场景下都有应用,如图片...

    base64转换遇到问题解决方法

    2. 字符编码问题:BASE64转换过程中,可能会出现字符编码问题,例如中文字符的编码问题。 解决方法 要解决这些问题,可以使用以下方法: 1. 对于Access restriction问题,可以在project build path中先移除JRE ...

    文件转换为Base64编码

    - **电子邮件**:由于邮件系统通常只能处理ASCII字符,Base64编码使得包含二进制附件(如图片或文档)的邮件能够被正确传递。 - **HTTP头部**:HTTP协议的头部字段通常只能包含ASCII字符,Base64编码使得可以在头部...

    Base64编码和解码器

    Base64编码是一种在互联网上常见的数据编码方式,主要用于将任意二进制数据转换为可打印的ASCII字符,以便在不支持二进制传输的环境中(如电子邮件)进行传输。Base64编码基于标准的64个可打印字符,包括大小写字母...

    Delphi版的Base64互相转换函数

    Base64是一种网络上常见的数据编码方式,它将任意二进制数据转化为可打印的ASCII字符,以便在电子邮件、文本协议等不支持二进制传输的环境中使用。在Delphi编程环境中,处理Base64编码和解码是常见的需求,这涉及到...

    javascript/微信小程序中将String进行Base64编码并UTF-8格式输出

    提供一种Base64编码,并输出UTF-8格式的BASE64编码方式。本程序在微信小程序开发工具中已经测试通过。 Base64代码: [javascript] view plain copy print? (function(){ var BASE64_MAPPING = [ 'A','B','C','D',...

    BASE64——Delphi程序

    BASE64是一种编码方式,常用于在不支持二进制数据传输的环境下,如电子邮件系统,将二进制数据转化为可打印的ASCII字符。在Delphi编程环境中,我们可以使用内置的或者自定义的方法来实现BASE64的编码和解码。 在...

    VB JPG转base64和base64转JPG.rar

    在IT领域,Base64是一种用于将任意二进制数据编码为ASCII字符串的编码方式,以便在不支持二进制传输的系统(如电子邮件)中传输。VB(Visual Basic)是微软开发的一种面向对象的编程语言,常用于开发桌面应用程序。...

    2进制与base64编码转换C代码

    需要一个二进制与BASE64相互转换的函数,从网上找...示例中提供二进制与16进制字符串转换函数ConvertHexStrToBin与ConvertBinToHexStr,二进制与BASE64编码转换函数Base64Encode与Base64Decode,在VC6下编译通过可用。

Global site tag (gtag.js) - Google Analytics