`
答案在风中
  • 浏览: 65558 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

常用字符编码转换

阅读更多

       不论是web开发或是移动开发,在不同场景总是需要用的编码的转换,之前一直没有去深入的研究其中的转换关系,今天抽空学习了下(字符编码介绍很多,我只是将之间的关系总结了下,具体介绍可自行wiki)。

       先介绍下几种主要的编码方式ASCII、Unicode、UTF-8、GBK、BASE64、URLEncode。

  1. ASCII:美国信息交换标准代码,是基于拉丁字母的一套电脑编码系统,只能显示26个基本拉丁字母、阿拉伯数目字和英式标点符号,现在的软件系统大多采用Unicode7位字符集,支持128个字符。
  2. Unicode固定长度2字节,16位字符集,最多支持2^16个字符。因为ASCII码只有7位,Unicode表示ASCII码,会用0补齐,会造成浪费所以又再次基础上扩展出了UTF-8等变长编码方案。
  3. UTF-8是一种针对Unicode的可变长度字符编码,也是一种前缀码。通过1-6个字节表示不同编码,非固定长度,通过编码前缀来区分不同编码。
    代码范围
    十六进制 标量值(scalar value)
    二进制 UTF-8
    二进制十六进制 注释
    000000 - 00007F
    128个代码
    00000000 00000000 0zzzzzzz 0zzzzzzz(00-7F) ASCII字符范围,字节由零开始
    七个z 七个z
    000080 - 0007FF
    1920个代码
    00000000 00000yyy yyzzzzzz 110yyyyy(C0-DF) 10zzzzzz(80-BF) 第一个字节由110开始,接着的字节由10开始
    三个y;二个y;六个z 五个y;六个z
    000800 - 00D7FF
    00E000 - 00FFFF
    61440个代码 [Note 1]
    00000000 xxxxyyyy yyzzzzzz 1110xxxx(E0-EF) 10yyyyyy 10zzzzzz 第一个字节由1110开始,接着的字节由10开始
    四个x;四个y;二个y;六个z 四个x;六个y;六个z
    010000 - 10FFFF
    1048576个代码
    000wwwxx xxxxyyyy yyzzzzzz 11110www(F0-F7) 10xxxxxx 10yyyyyy 10zzzzzz 将由11110开始,接着的字节由10开始
    三个w;二个x;四个x;四个y;二个y;六个z 三个w;六个x;六个y;六个z

  4. GBK:汉字内码扩展规范,这个就不多介绍了: GBK的编码范围 范围 第1字节 第2字节 编码数 字数 合计:     23,940 21,886

    水准 GBK/1 A1A9 A1FE 846 717
    水准 GBK/2 B0F7 A1FE 6,768 6,763
    水准 GBK/3 81A0 40FE (7F除外) 6,080 6,080
    水准 GBK/4 AAFE 40A0 (7F除外) 8,160 8,160
    水准 GBK/5 A8A9 40A0 (7F除外) 192 166
    用户定义 AAAF A1FE 564  
    用户定义 F8FE A1FE 658  
    用户定义 A1A7 40A0 (7F除外) 672  
  5. BASE64:ASCII、Unicode、UTF-8编码其实建立的是字符与字符编码的对应关系(即字符->字符编码),BASE64、URLEncode是建立在这些字符集上用于在一些特殊场景中的编码转换方案(字符编码->字符)。BASE64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个位元为一个单元,对应某个可打印字符。三个字节有24个位元,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。3byte的原始字符编码数据需要使用4个打印字符表示,64个打印字符包括大小写26个英文字母10个数字“+”、“/"、"=",因此经过base64编码后的数据长度约为原长度的4/3。

     

    Base64索引表:

    Value Char Value Char Value Char Value Char
       
    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 /

     

  6. URLEncode:URL编码,是特定上下文的统一资源定位符 (URI)的编码机制,URI所允许的字符分作保留与未保留,保留字符具有特殊含义( 例如:斜线字符用于URL (或者更一般的, URI)不同部分的分界),未保留字符没有这些特殊含义,URI中的其它字符必须用百分号编码。
    如果一个保留字符在特定上下文中具有特殊含义(称作"reserved purpose") , 且URI中必须使用该字符用于其它目的, 那么该字符必须百分号编码. 百分号编码一个保留字符,首先需要把该字符的ASCII的值表示为两个16进制的数字,然后在其前面放置转义字符("%"),置入URI中的相应位置。(对于非ASCII字符, 需要转换为UTF-8字节序, 然后每个字节按照上述方式表示.)
    RFC 3986 section 2.2 保留字符 (2005年1月)
    ! * ' ( ) ; : @ & = + $ , / ? # [ ]
    RFC 3986 section 2.3 未保留字符 (2005年1月)
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    a b c d e f g h i j k l m n o p q r s t u v w x y z
    0 1 2 3 4 5 6 7 8 9 - _ . ~  

给个简单的例子,看看编码间的转换:

“我”对应的uncode码(java和net中string存储字符使用的就是unicode,string toCharArray之后的字符的值即为unicode码值):0110 0010 0001 0001 ,u6211

utf-8表示2个字节使用的标量值1110xxxx(E0-EF) 10yyyyyy 10zzzzzz(6z+6y+4x=2*8),unicode的2进制码转换utf-8:1110 0110  100010 00 1001 0001,16进制码为0xE6 0x88 0x91
对上面的UTF-8编码结果进行Base64编码过程,拆分1110 0110  100010 00 1001 0001为111001、101000、100010、01000对应十进制数值57、40、34、17,码表中的字符5oiR,即对应的BASE64字符串。

 

分享到:
评论

相关推荐

    易语言字符编码转换

    在处理字符串和文本数据时,字符编码转换是一个常见的需求,因为不同的系统和应用可能使用不同的字符编码标准来表示文本。本资源提供了易语言字符编码转换的源码,帮助开发者理解和实现这一功能。 字符编码是用来...

    字符编码转换器(Encoding Tool)EncodingTool

    《字符编码转换器(Encoding Tool)——深入理解与应用》 字符编码是计算机处理文本的基础,不同的编码方式决定了如何存储和显示各种语言的字符。在信息化社会中,由于全球化的需求,我们常常需要面对不同编码格式...

    不同字符编码转换

    这里我们将深入探讨标题和描述中提到的一些主要字符编码格式:UTF-8、UTF-7、ASCII、Unicode以及GB2312,同时还会涉及到大五码(Big5)以及它们之间的转换。 1. ASCII编码:ASCII(美国标准信息交换代码)是最基础...

    字符编码转换器.rar

    "字符编码转换器"是一款实用工具,能够帮助用户在这些编码格式之间轻松转换,解决因编码不匹配导致的乱码问题。 ASCII编码是最基础的字符编码,只包含了128个最基本的英文字符。然而,当涉及到其他语言,如中文、...

    字符编码转换,支持任意编码

    在这个主题中,我们将深入探讨“字符编码转换”这一重要概念,以及如何支持包括GBK、UNICODE(UTF-16)、UTF-8以及GB18030等在内的多种编码。 首先,我们来了解字符编码的基本概念。字符编码是一种将字符与数字对应...

    全能字符编码转换工具

    《全能字符编码转换工具》是一款全面且强大的编码转换软件,专为解决各种字符编码之间的转换问题而设计。在信息技术领域,字符编码是至关重要的组成部分,它决定了计算机如何存储和显示文本。这款工具支持多种编码...

    C语言字符编码转换UNICODE、GBK、UTF-8互相转换

    在C语言中,进行字符编码转换通常涉及到内存操作和位操作,因为C语言没有内置的字符串类或者编码转换函数。以下是一些基本步骤: 1. **读取原始编码**:首先,你需要读取源文件或字符串,确定其当前的编码格式。这...

    java字符串的各种编码转换

    ### 字符编码转换方法 为了实现字符编码的转换,可以使用`changeCharset`方法。该方法接受一个源字符串和目标字符集名称作为参数,然后返回转换后的字符串。 ```java public String changeCharset(String str, ...

    字符编码转换器

    "字符编码转换器"是一款工具,能够帮助用户将不同编码格式的文本文件进行转换,以确保在不同系统或环境下正确显示文字。这里我们将深入探讨字符编码的主要类型,以及转换过程中可能遇到的问题。 1. **GBK编码**:...

    VB转换字符编码(构造发送字符消息的准备工作)

    以下是进行字符编码转换和发送字符消息的关键步骤: 1. **识别输入编码**:首先,你需要知道你接收到的数据是哪种编码格式。这可能通过元信息、文件头或者预先设定的信息来确定。 2. **编码转换**:一旦识别了输入...

    常用字符集及字符编码简介

    UTF-8具有良好的向前兼容性,广泛应用于网络传输和存储,是目前最常用的字符编码。 4. **ISO-8859** ISO-8859系列是一组8位的字符编码标准,包括ISO-8859-1到ISO-8859-16,分别支持不同的语言。例如,ISO-8859-1...

    字符编码转换(GB2312,UTF-8,UNICODE)

    在实际应用中,如“字符编码转换”这样的工具,可以方便地处理单个或多个文件的编码转换需求,大大简化了处理不同编码格式间的转换工作,避免了因编码不匹配带来的诸多不便。 总之,理解并掌握不同的字符编码及其...

    文件字符编码转换

    "文件字符编码转换"的主题着重于如何将不同编码格式的文件或文件夹在GBK、GB2312、Unicode(USC-2)以及UTF-8之间进行转换。 1. **GBK与GB2312**:这两个都是中国国家标准的简体中文字符编码。GB2312是早期的编码...

    字符编码转换.rar

    在给定的“字符编码转换.rar”压缩包文件中,包含的资源可能是一个LabVIEW程序或工具,用于进行不同字符编码间的转换,比如UTF-8到GBK,GBK到GBK,甚至支持更广泛的字符集之间的转换。下面我们将深入探讨字符编码的...

    关于 字符编码的 转换 知识

    以下是一些常见的字符编码转换场景及方法: 1. **从GB2312转换到UTF-8**:首先解析GB2312编码的字符,将其转换成Unicode,然后再将Unicode转换成UTF-8编码。 2. **从UTF-8转换到GB2312**:这个过程与上述相反,先将...

    字符编码之间的转换规则与实现

    Unicode有多种编码形式,如UTF-16、UTF-32等,其中UTF-16是最常用的一种,它将每个Unicode字符编码为2或4个字节。 UTF-8编码则是Unicode的一个变种,它采用变长字节编码,对于ASCII字符,UTF-8编码与ASCII完全相同...

    CC++ 字符编码的转换(ut8、gb2312)

    总的来说,理解和掌握字符编码转换对于CC++开发人员来说至关重要,尤其是在处理多语言或跨平台项目时。通过选择合适的工具和库,可以有效地处理不同编码间的转换,确保数据的正确性和一致性。在实际操作中,应始终...

    常用字符编码详解.doc

    字符编码是计算机科学中的一种基础概念,它是指将文字、符号等字符转换为计算机可以识别的二进制代码的过程。常用的字符编码有 ASCII、GB2312、GBK、GB18030 等。 1. ASCII 编码 ASCII 编码是一种 7 位编码,编码...

    qt实现转换文件字符集编码

    在Qt中,`QTextCodec`类是进行字符编码转换的核心工具。它可以创建并管理各种编码的解码器和编码器。例如,如果我们要将一个GBK编码的文件转换为UTF-8,我们可以这样做: ```cpp #include #include #include #...

Global site tag (gtag.js) - Google Analytics