gpt4 book ai didi

javascript - 如何在 JavaScript 中将位字符串编码为 UTF16 字符串而不浪费任何空间?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:56 24 4
gpt4 key购买 nike

假设您有一个字节串:"0100010101110001010..."。如何将其转换为UTF16字符串(如:"A|b☮"),以及如何将其转换回原始字节串?

我尝试了下面的实现,但似乎我对 UTF16 的理解不够好,代码在某些(我不知道是哪种)情况下中断。

var pad = function(x){
while(x.length%16!==0)
x="0"+x;
return x;
}
var unpack_bin = function(a){
for(var r="",i=0,l=a.length;i<l;++i)
r+=pad((a[i].charCodeAt(0)-36).toString(2));
return r.slice(r.indexOf("1")+1);
}
var pack_bin = function(a) {
for (var s="",i=0,l=a.length,a=pad("1"+a);i<l;i+=16)
s+=String.fromCharCode(parseInt(a.slice(i,i+16),2)+36);
return s;
}

最佳答案

一个 UTF-16 单元不能容纳 16 位,但可以容纳 14 位。

CJK Unified Ideographs是 20941 个有效 unicode 字符的连续 block ,每个字符由单个 UTF-16 单元编码。

function pad(x, div){
while(x.length%div!==0)
x="0"+x;
return x;
}

function unpack_bin(packedString){
var binString = "";
for(var i=0; i<packedString.length; ++i) {
var binValue = packedString[i].charCodeAt(0)-0x4E00;
binString += pad(binValue.toString(2), 14);
}
return binString.slice(binString.indexOf("1")+1);
}

function pack_bin(binString) {
binString = pad("1"+binString, 14);
var packedString = "";
for(var i=0; i<binString.length; i+=14) {
var charCode = parseInt(binString.slice(i, i+14), 2)+0x4E00;
packedString += String.fromCharCode(charCode);
}
return packedString;
}

另请参阅:Twitter image encoding challenge

关于javascript - 如何在 JavaScript 中将位字符串编码为 UTF16 字符串而不浪费任何空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21897562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com