由于JavaScript
语言自身原因(JavaScript语言内置字符串只支持ascii与utf-16编码,为了不丢失数据),
当遇到无法编码字符串时会返回ArrayBuffer
类型。优宽量化所有API接口可以传入字符串的参数也支持传入ArrayBuffer
类型。
可以通过以下例子简单说明:
function stringToHex(str) {
let hex = '';
for (let i = 0; i < str.length; i++) {
const charCode = str.charCodeAt(i).toString(16);
hex += charCode.length === 1 ? '0' + charCode : charCode;
}
return hex;
}
function main() {
const inputString = "abc𠮷123"; // 这个“𠮷”字符的Unicode码点超出了16位
// const inputString = "abcG123"; // 如果使用abcG123字符串测试,则变量outputD不会赋值为ArrayBuffer
// 使用Encode函数将inputString编码为hex编码
const encodedHex = Encode("raw", "string", "hex", inputString);
Log(encodedHex); // 内容为:61 62 63 f0a0aeb7 31 32 33
// 使用自己实现的stringToHex函数编码,由于无法处理“𠮷”字符,导致hex编码有误
const manuallyEncodedHex = stringToHex(inputString);
Log(manuallyEncodedHex); // 内容为:61 62 63 d842dfb7 31 32 33
// 成功从hex编码还原为字符串(变量inputString)
const decodedString = Encode("raw", "hex", "string", encodedHex);
Log(decodedString);
// 无法解码,返回ArrayBuffer,即变量outputD为ArrayBuffer
const outputD = Encode("raw", "hex", "string", manuallyEncodedHex);
Log(outputD);
// 验证返回的ArrayBuffer类型变量outputD
const bufferD = new Uint8Array(outputD);
let hexBufferD = '';
for (let i = 0; i < bufferD.length; i++) {
hexBufferD += bufferD[i].toString(16).padStart(2, '0');
}
Log(hexBufferD); // 61 62 63 d842dfb7 31 32 33
}
C++策略编写说明
内置库