Skip to content

编解码

编解码在计算机中用于不同信息间的相互转化.

编码和解码过程互逆.

以生活中的场景来举例:

英文大小写转换, 中文简体繁体转换, 进制转换, 汇率转换, 字符编码转换(ASCII, UTF, GBK 等等)...

Base64

Base64 是基于 64 个字符来表示二进制数据的编码方法.

编码原理:

准备 64 个字符: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

准备一个待编码信息: abcde

按以下步骤

  1. 将信息以 3 个字节为一组: [abc, de]

  2. 将每组的信息转化成 8 位二进制, 每 6 位二进制数为一组, 然后每组前面补两个 0, 补完不足 8 位的在后面补满: [['01100001', '01100010', '01100011'] ['01100100', '01100101']] -> [['00011000', '00010110', '00001001', '00100011'], ['00011001', '00000110', '00010100']]

  3. 将每组的二进制转化为10进制并从字符表中映射出来, 每组长度不足4的补=号补到4: [['24', '22', '9', '35'], ['25', '6', '20']] -> [['Y', 'W', 'J', 'j'], ['Z', 'G', 'U', '=']]

解码原理: 解码是编码的逆过程

123456789101112131415161718192021222324252627282930313233343536
<template>
  <div>
    <textarea class="input" placeholder="输入" v-model="input" />

    <span style="display: inline-block; width: 100px; text-align: center">
      <v-button class="button" @click="handleEncode">编码</v-button>
      <br />
      <v-button class="button" @click="handleDecode">解码</v-button>
    </span>

    <textarea class="input" placeholder="输出" readonly :value="output" />
  </div>
</template>

<script lang="ts" setup>
import { base64 } from '@cat-kit/fe'
import { shallowRef } from 'vue'

const input = shallowRef('')
const output = shallowRef('')

const handleEncode = () => {
  output.value = base64.encode(input.value)
}
const handleDecode = () => {
  output.value = base64.decode(input.value)
}
</script>

<style scoped>
textarea {
  border: 1px solid #ccc;
  vertical-align: top;
}
</style>

MIT Licensed