理想是火,点燃熄灭的灯。
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);
// 示例的乱码字符串(在实际情况下,它应该是从 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);
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 则更多见于历史遗留系统或特定的西欧语言环境中。
作者: Bill 本文地址: http://biaoblog.cn/info?id=1720406628932
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!