You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改JavaScript字符串字节计算代码以匹配Oracle lengthB结果

让JavaScript计算结果与Oracle的lengthB函数一致

差异原因

你的JavaScript代码通过Blob.size获取的是字符串标准UTF-8编码的字节数,而Oracle的lengthB函数(默认字符集为AL32UTF8时)会将Unicode补充平面字符(比如表情😊)拆分为UTF-16代理对,每个代理码元单独以UTF-8编码(每个占3字节)。例如:

  • 表情😊(U+1F60A)在标准UTF-8中占4字节,但在Oracle AL32UTF8中会被拆分为两个UTF-16代理码元(0xD83D、0xDE0A),每个码元转UTF-8占3字节,总共6字节——这就是你的例子中结果差2字节的原因。

修正后的JavaScript代码

以下代码模拟Oracle AL32UTF8字符集下lengthB的计算逻辑:

const oracleLengthB = str => {
  let byteCount = 0;
  for (let i = 0; i < str.length; i++) {
    const code = str.charCodeAt(i);
    if (code <= 0x7F) {
      byteCount += 1;
    } else if (code <= 0x7FF) {
      byteCount += 2;
    } else {
      byteCount += 3;
    }
  }
  return byteCount;
};

测试验证

调用oracleLengthB("Susan 002 UK ACM Testing 😊")会返回31,与Oracle的lengthB结果完全一致。

说明

该代码默认适配Oracle最常用的AL32UTF8字符集(Oracle的UTF8字符集本质是CESU-8,逻辑相同)。如果你的Oracle数据库使用其他字符集(如GBK、ISO-8859-1),则需要根据对应字符集的编码规则调整字节计算逻辑。

内容的提问来源于stack exchange,提问作者Indranil Mondal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:17:49