javascript现代编程系列教程之七——字符数据类型-字符集-编码解码-常用字符串处理方法(七)
一、字符集
- Unicode:Unicode 是一个字符集(Charset),包含了世界上所有的字符。每个字符在 Unicode 中都有其唯一对应的数字编号,这就是我们常说的 Unicode 码。
- UTF-8:UTF-8 是 Unicode 的实现方式之一。UTF-8 使用一至四个字节为每个字符编码,英文字符通常使用一个字节,西欧其他语言的部分字符使用两个字节,剩下的字符则使用三或四个字节。UTF-8 兼容 ASCII,即 ASCII 可以被看作是 UTF-8 的一部分。
- UTF-16:UTF-16 也是 Unicode 的实现方式之一。UTF-16 使用两个或四个字节为每个字符编码。对于 Unicode 字符集中前 65536 个字符(即基本多文种平面,包括大部分常用字符),UTF-16 使用两个字节进行编码;对于剩下的字符,UTF-16 使用四个字节进行编码。
总结来说,Unicode 是一个很大的“字符库”,而 UTF-8 和 UTF-16 是将这些字符转换为计算机可以理解的二进制数据的方法。
二、JS编码和解码
btoa():任意值转为 Base64 编码
atob():Base64 编码转为原来的值
function b64Encode(str) {
return btoa(encodeURIComponent(str));
}
function b64Decode(str) {
return decodeURIComponent(atob(str));
}
b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"
总结一下:因为ASCII中的字符只包含了大小写英文字母-数字-标点符号和控制字符,不包含中文和其他字符,因此在编码为Base64字符进行传输和处理之前先要讲原字符串转换为UTF-8字符集。encodeURIComponent()和decodeURIComponent()就是加解密为UTF-8字符集。而btoa()为base64加密,atob()为base64解密。
三、C#中的编码和解码
在C#中,你可以使用System.Text.Encoding
类将字符串编码和解码为UTF-8。以下是一个示例:
using System;
using System.Text;
class Program
{
static void Main()
{
string originalString = "你好";
// 编码为UTF-8字节
byte[] utf8Bytes = Encoding.UTF8.GetBytes(originalString);
Console.WriteLine("编码后: " + BitConverter.ToString(utf8Bytes));
// 解码回字符串
string decodedString = Encoding.UTF8.GetString(utf8Bytes);
Console.WriteLine("解码后: " + decodedString);
}
}
这个程序首先使用Encoding.UTF8.GetBytes
将字符串编码为UTF-8字节,然后使用Encoding.UTF8.GetString
将其解码回字符串。
接下来的步骤可能包括:
- 处理编码或解码过程中可能出现的异常。
- 处理不同类型的数据,而不仅仅是字符串。
- 将编码后的数据保存到文件或通过网络发送。