一个前端,爱跑步、爱吉他、爱做饭、爱生活、爱编程、爱南芳姑娘,爱我所爱。世间最温暖又无价的是阳光、空气与爱,愿它们能带你去更远的地方。

  • 文章
  • 心情
  • 照片墙
  • 留言板
  • 工具
  • 友链
  • biaoblog

    专注web开发技术分享

    base64转json以及字符串编码转换

    技术 208 2024-07-08 10:43

    把后端处理的base64的解码为json,并把其中的字符串转为utf-8格式的(默认返回的是ISO-8859-1格式的)

        let encodedString = `W3siaWQiOiJkZWJhZTBhZjNhMzYzNmNiOWVlMTZhNjM5OWY0ZjI3ZGJjZmVhYjU2ZmY2MzE3NWNmMGExZWQzZTAxNjc4MDBjIiwibmFtZSI6Iua3seWcs+W4guWkjeaYn+WbvemZheeJqea1geaciemZkOWFrOWPuCIsImR1cGxpY2F0ZVJlcG9ydElkIjoyODIzfSx7ImlkIjoiOTdlN2NjMzUzMzRlMjQyMDljYTFmNmZkNzYwZTE4MDU1ZTc2NzVjZjI0ZWFkYzE0Njg2ODBhODA5NDZhZTQ4ZiIsIm5hbWUiOiLljJfkuqzlr4zpgJTmjqfogqHmnInpmZDlhazlj7giLCJkdXBsaWNhdGVSZXBvcnRJZCI6MjgyNH0seyJpZCI6IjdmYjdhNzM1YTIxYmQ0Yjg5ZTY1NmI0ZTBiYTgzZTE0NTkxOTFiN2UwNWExYzVkMjMzNzFiYTgxYTRhOWEzNjkiLCJuYW1lIjoi5rex5Zyz5biC5pav56eR5bCU56eR5oqA6IKh5Lu95pyJ6ZmQ5YWs5Y+4IiwiZHVwbGljYXRlUmVwb3J0SWQiOjI4MjV9XQ==`;
        // Decode base64 string to byte array
        let bytes = Uint8Array.from(atob(encodedString), c => c.charCodeAt(0));
        // Convert byte array to string using UTF-8 decoder
        let decodedString = new TextDecoder('utf-8').decode(bytes);
        // Parse JSON
        let jsonData = JSON.parse(decodedString);
    


    ISO-8859-1字符串转为uft-8

    // 示例的乱码字符串(在实际情况下,它应该是从 base64 解码得到的)
    let garbledString = "深圳市复星国际物流有限公司";
    
    // 将乱码字符串转换为正确的 UTF-8 字符串
    function fixGarbledString(str) {
      // 将字符串转为 Uint8Array
      let bytes = new Uint8Array(str.length);
      for (let i = 0; i < str.length; i++) {
        bytes[i] = str.charCodeAt(i);
      }
    
      // 使用 TextDecoder 解码为 UTF-8
      let decoder = new TextDecoder('utf-8');
      return decoder.decode(bytes);
    }
    
    // 使用函数转换
    let correctString = fixGarbledString(garbledString);
    
    // 打印正确的 UTF-8 字符串
    console.log(correctString);
    


    ISO-8859-1和uft-8的区别

    UTF-8 和 ISO-8859-1 是两种不同的字符编码标准,常用于计算机系统中处理文本数据。以下是对这两种编码的详细介绍:


    ### UTF-8 (8-bit Unicode Transformation Format)

    UTF-8 是一种可变长度的字符编码,用于表示 Unicode 字符集。它由 Ken Thompson 于 1992 年发明。


    #### 特点:

    1. **可变长度编码**:每个字符可以用 1 到 4 个字节表示:

      - 1 字节:用于 ASCII 字符(U+0000 到 U+007F)。

      - 2 字节:用于包含拉丁文补充字符的字符(U+0080 到 U+07FF)。

      - 3 字节:用于大多数常用的 Unicode 字符(U+0800 到 U+FFFF)。

      - 4 字节:用于极少使用的 Unicode 字符(U+10000 到 U+10FFFF)。

    2. **向后兼容 ASCII**:前 128 个字符与 ASCII 完全相同,确保 UTF-8 可以无缝使用在任何原先仅支持 ASCII 的环境中。

    3. **无字节顺序问题**:由于 UTF-8 是按字节分割的,无需担心字节顺序(endianness)问题。

    4. **全球使用**:UTF-8 是互联网上最常用的字符编码,支持所有语言的字符。


    #### 优点:

    - 高效的存储和传输:对于主要使用 ASCII 字符的文本,UTF-8 比其他编码节省空间。

    - 广泛的应用:大多数现代操作系统、编程语言和协议都支持 UTF-8。


    ### ISO-8859-1 (Latin-1)

    ISO-8859-1,又称 Latin-1,是一种单字节字符编码标准,由国际标准化组织 (ISO) 发布,主要用于西欧语言。


    #### 特点:

    1. **固定长度编码**:每个字符使用 1 个字节,因此可以表示 256 个不同的字符(0x00 到 0xFF)。

    2. **涵盖的字符**:包括 ASCII 的所有字符(0x00 到 0x7F)以及一些附加的西欧字符(0x80 到 0xFF)。

    3. **不支持多语言**:只适用于西欧语言,对非拉丁字符支持有限。


    #### 优点:

    - **简单**:由于每个字符固定为 1 个字节,处理起来相对简单。

    - **历史悠久**:曾经是许多早期系统和协议的标准字符编码。


    ### 比较

    1. **字符集范围**:

      - UTF-8:支持全世界所有语言的字符,字符集非常广泛。

      - ISO-8859-1:仅支持西欧语言字符,字符集有限。

      

    2. **编码方式**:

      - UTF-8:可变长度编码,1 到 4 个字节。

      - ISO-8859-1:固定长度编码,1 个字节。

      

    3. **兼容性**:

      - UTF-8:向后兼容 ASCII,适用于全球化应用。

      - ISO-8859-1:与 ASCII 兼容,但不适用于非西欧语言。


    4. **应用场景**:

      - UTF-8:广泛应用于互联网和现代软件系统,适合全球化应用。

      - ISO-8859-1:主要应用于传统的西欧语言文本处理。


    总之,UTF-8 因其广泛的字符支持和高效的编码方式,已经成为现代文本处理的主流编码标准,而 ISO-8859-1 则更多见于历史遗留系统或特定的西欧语言环境中。

    文章评论

    评论列表(0