gpt4 book ai didi

javascript - 如果<meta charset =“utf-8”>表示JavaScript使用的是utf-8编码而不是utf-16

转载 作者:行者123 更新时间:2023-12-03 01:26:59 25 4
gpt4 key购买 nike

我一直在尝试理解为什么对UTF-8进行编码/解码的需求在JavaScript领域中到处都是,并且了解到JavaScript使用UTF-16编码。

Let’s talk about Javascript string encoding

因此,我假设这就是为什么存在诸如utf8.js之类的库在UTF-16和UTF-8之间进行转换的原因。

但最后,他提供了一些见解:


  在Node中进行编码非常混乱,并且很难正确设置。但是,当您意识到Javascript字符串类型将始终被编码为UTF-16且在RAM中的其他大多数字符串与套接字,文件或字节数组进行交互时,它会有所帮助,该字符串将被重新编码为UTF-8 。
  
  当然,这都是非常低效的。大多数字符串都可以表示为UTF-8,并且使用两个字节来表示它们的字符意味着您使用的内存超出了您的需要,并且每次遇到HTTP时都要支付O(n)税来重新编码字符串或文件系统边界。


这让我想起了HTML <meta charset=“utf-8”>中的<head>,除了“您需要使用它才能使文本正常工作”之外,我从来没有想过太多。

现在我想知道,这个问题是关于那个<meta charset=“utf-8”>标记是否告诉JavaScript进行UTF-8编码的。这意味着在JavaScript中创建字符串时,字符串将采用UTF-8编码,而不是UTF-16。或者,如果我错了,那到底是在做什么。如果它告诉JavaScript使用UTF-8编码而不是UTF-16(我认为这是“默认”),那么这意味着您无需在之间进行转换就不必支付O(n)税UTF-8和UTF-16,这意味着性能上的提高。想知道我是否正确理解,或者如果我不正确,我会缺少什么。

最佳答案

元数据中的字符集

<meta charset=“utf-8”>标记告诉HTML(更不用说:HTML解析器),页面的编码为utf8。

JS没有内置的功能可以在不同的字符串之间切换-它始终是utf-16。

渐近界

我认为编码转换不会受到O(n)的惩罚。每当需要进行这种编码更改时,就已经存在O(n)操作:读取/写入数据流。因此,每个八位位组上任何固定数量的操作仍为O(n)。编码更改仅需要本地知识,即。一个仅具有固定长度的超前窗口,因此可以以O(1)的代价并入流读/写代码中。

您可能会争辩说,空间损失为O(n),尽管如果需要以任何标准编码来存储字符串(即,不进行压缩),则移至utf-16意味着最大因数为2,因此保持在O(n)绑定。

恒定因素

即使担忧是使隐藏在O(n)表示法编码更改中的常数因子最小化,也至少在时域具有适度的影响。对于大部分(西方)文本数据,以utf-8格式写入/读取utf-16流意味着跳过第二个八位位组/插入空八位位组。与与套接字或文件系统接口产生的开销和延迟相比,该性能下降了。

当然,存储空间有所不同,尽管如今存储空间相对便宜,并且2的上限仍然成立。从32位到64位对数字表示和指针的内存影响更大。

关于javascript - 如果&lt;meta charset =“utf-8”>表示JavaScript使用的是utf-8编码而不是utf-16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51487992/

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