Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串截断为1 MB大小限制_Javascript - Fatal编程技术网

Javascript 将字符串截断为1 MB大小限制

Javascript 将字符串截断为1 MB大小限制,javascript,Javascript,我需要剪切字符串-基本上如果字符串长度超过1MB,我应该将其剪切到这个大小 我使用这些函数来检查字符串大小 function __to_mb(bytes) { return bytes / Math.pow(1024, 2) } function __size_mb(str) { return __to_mb(Buffer.byteLength(str, 'utf8')) } 然后我像这样检查字符串的大小 if (__size_mb(str) > 1) { /* do som

我需要剪切字符串-基本上如果字符串长度超过1MB,我应该将其剪切到这个大小

我使用这些函数来检查字符串大小

function __to_mb(bytes) {
   return bytes / Math.pow(1024, 2)
}

function __size_mb(str) {
  return __to_mb(Buffer.byteLength(str, 'utf8'))
}
然后我像这样检查字符串的大小

if (__size_mb(str) > 1) { /* do something */ }

但是如何剪切呢?

一个Javascript字符串由16位序列组成,其中一些字符使用一个16位序列,另一些字符需要两个16位序列

<> P>没有简单的方法来取一个字节,并考虑它完成了——在截断位置的两侧可能有一个2X 16位字符,然后将其切成两半。

为了安全切割,我们可以使用ES2015中引入的
str.codePointAt(index)
。它知道哪些字符是16位,哪些是2x 16位。它将这些16位值中的1或2组合成一个整数结果值

  • 如果
    codePointAt()
    返回一个值=
    2^16
    ,那么在偏移量
    index
    index+1
    处有一个2x 16位字符
不幸的是,这意味着要遍历整个字符串来评估每个索引。这可能看起来很尴尬,甚至可能很慢,但我不知道有什么更快或更聪明的方法可以做到这一点

演示:


var str=“abç但是它会减少字符数量。我想要1 MB的大小。