当前博客:请教取字符的代码、字节等问题

48 次浏览【转载需注明来源】

博客作者:【激荡】

个性签名:寒窗苦读十年一朝凤舞九天

想把字符串转换成字节集,字符代码转字符等问题

用循环可以把字符串转成字节,但碰到汉字就乱码。

默认排序
Generic placeholder image
Generic placeholder image
已采纳
快码FOF编程 Time: 2024-02-23 11:09:06
定义函数 字符串转UTF8字节(字符串数据) {
    变量 utf8字节 = [];
    循环 (变量 索引 = 0; 索引 < 字符串数据.长度; ) {
        变量 Unicode值 = 字符串数据.取Unicode值(索引);
        如果 (Unicode值 < 0x80) {
            utf8字节.添加成员(Unicode值);
            索引++;
        } 否则 如果 (Unicode值 < 0x800) {
            utf8字节.添加成员(0xc0 | (Unicode值 >> 6), 0x80 | (Unicode值 & 0x3f));
            索引++;
        } 否则 如果 (Unicode值 >= 0xd800 && Unicode值 <= 0xdbff /* high surrogate */) {
            // UTF-16 surrogate pair
            变量 Unicode值匹配 = Unicode值;
            Unicode值 = 0x10000 + ((Unicode值匹配 - 0xd800) << 10);
            变量 下一个Unicode值 = 字符串数据.取Unicode值(++索引);
            如果 (下一个Unicode值 < 0xdc00 || 下一个Unicode值 > 0xdfff) {
                // Invalid surrogate pair
                抛出异常 新建对象 Error("遇到无效的值");
            }
            Unicode值 |= 下一个Unicode值 - 0xdc00;
            utf8字节.添加成员(0xf0 | (Unicode值 >> 18), 0x80 | ((Unicode值 >> 12) & 0x3f), 0x80 | ((Unicode值 >> 6) & 0x3f), 0x80 | (Unicode值 & 0x3f));
        } 否则 {
            utf8字节.添加成员(0xe0 | (Unicode值 >> 12), 0x80 | ((Unicode值 >> 6) & 0x3f), 0x80 | (Unicode值 & 0x3f));
            索引++;
        }
    }
    返回 utf8字节;
}
定义函数 UTF8字节转字符串(bytes) {
    返回 新建对象 TextDecoder("utf-8").decode(新建对象 无符号8位整型数组(bytes));//在较新的浏览器中有该API,这里封装成一个名叫UTF8字节转字符串的方法
}
变量 字符串数据 = "你好,世界!";
变量 UTF8字节 = 字符串转UTF8字节(字符串数据);
调试输出(UTF8字节);
字符串数据 = UTF8字节转字符串(UTF8字节);
调试输出(字符串数据); // 输出:"你好,世界!"

上述代码是字符串和UTF8字节数组的相互转换


请教取字符的代码、字节等问题