2
我有一个字符串,其中包含UTF-32(但可能更高的16位将始终为0)代码点。每个标记是长字符串中每个字符的代码点的4个字节中的1个。 请注意,在转换为字符串之前,将字节解释为signed int,我无法控制此字符串。JavaScript:如何将多字节字符串数组转换为32位int数组?
// Provided:
intEncodedBytesString= "0,0,0,-31,0,0,0,-15,0,0,0,-31"; //3 chars: áñá
// Wanted
actualCodePoints = [225,241,225];
我需要将intEncodedBytesString转换为actualCodePoints数组。 到目前为止,我想出了这一点:
var intEncodedBytesStringArray = intEncodedBytesString.toString().split(',');
var i, str = '';
var charAmount = intEncodedBytesStringArray.length/4;
for (i = 0; i < charAmount; i++) {
var codePoint = 0;
for (var j = 0; j < 4; j++) {
var num = parseInt(intEncodedBytesStringArray[i * 4 + j], 10);
if (num != 0) {
if (num < 0) {
num = (1 << (8 * (4 - j))) + num;
}
codePoint += (num << (8 * (3 - j)));
}
}
str += String.fromCodePoint(codePoint);
}
是否有这样做的更好的,更简单的和/或更有效的方式?
我已经看到了几十个答案和代码snipets来处理类似的事情,但没有解决这个问题,我的输入字节在签署整数的字符串:S
编辑:此代码不会以最高的工作代码点自1 < < 32是1而不是2^32。
@ T.J.Crowder事实上,UTF-32。编辑补充说。 – TigerShark