【问题标题】:How to encode to base64 non-ASCII characters?如何编码为 base64 非 ASCII 字符?
【发布时间】:2020-03-31 01:19:47
【问题描述】:

有人可以向我解释如何将字符串“®”编码为 base64(我刚刚选择了任何非 ASCII 字符来举例说明)吗?此字符表示二进制代码 174 或 10101110。

结果是“wq4=”(通过检查两个在线进行 base64 编码的不同网站得到这个)。

我了解 base64 编码系统的工作原理。对于 ASCII 字符,我可以获得正确的结果,但对于任何非 ASCII 字符,结果永远不会匹配。

我尝试了两种方法:

  1. 直接使用此 char (10101110) 的二进制文件并将其拆分为 2 个 6 位的块:101011 和 100000。对于 base64,它们对应于“rg”
  2. 首先将 10101110 转换为 UTF-8,所以我有 2 个字节:11010101 和 10110000。然后我混合这两个字节并将它们分成 6 位块:110101 011011 000000。对于 base64,它们对应于“1bA”。李>

我不知道如何处理非 ASCII 字符。通过对任何 ASCII 字符进行相同的计算,就可以了。

有谁知道我做错了什么?

【问题讨论】:

    标签: unicode encoding base64 ascii


    【解决方案1】:

    Base64 将二进制数据编码为 ASCII 文本。 Unicode 字符® 在应用 Base64 之前可以用任何编码进行编码,但 UTF-8 很方便,因为它可以编码任何 Unicode 码位。

    问题中的错误在于转换为 UTF-8。这些位从右到左分配最低有效位,但从左到右分配最高有效位。

    1. ® 的Unicode 代码点开头,即U+00AE
    2. 转换为二进制:10101110
    3. 代码点 U+0080 到 U+07FF 需要两字节 UTF-8 编码:110xxxxx 10xxxxxx。按如下方式分配位:11000010 10101110
    4. 将数据分组为 3 字节块。只有两个字节,所以完成后需要一个字节的填充。
    5. 重组为 6 位块:110000 101010 111000
    6. 转换为十进制:48 42 56
    7. 使用下面的base64表+一个pad:wq4=
    Value Encoding  Value Encoding  Value Encoding  Value Encoding
        0 A            17 R            34 i            51 z
        1 B            18 S            35 j            52 0
        2 C            19 T            36 k            53 1
        3 D            20 U            37 l            54 2
        4 E            21 V            38 m            55 3
        5 F            22 W            39 n            56 4
        6 G            23 X            40 o            57 5
        7 H            24 Y            41 p            58 6
        8 I            25 Z            42 q            59 7
        9 J            26 a            43 r            60 8
       10 K            27 b            44 s            61 9
       11 L            28 c            45 t            62 +
       12 M            29 d            46 u            63 /
       13 N            30 e            47 v
       14 O            31 f            48 w         (pad) =
       15 P            32 g            49 x
       16 Q            33 h            50 y
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 2011-06-20
      相关资源
      最近更新 更多