当在编程语言 (例如,javascript)中我们向字符串写入内容或添加字符时(a = ''; a += 'b';),那么它以什么编码存储在内存本身中?
如果只是一堆位,为什么在打开文本文件(Node js)时指定编码?
为什么保存时要指定编码?也许是为了使内存中的位序列保留在这种特定的编码中?但事实并非如此。毕竟,如果我写一个字符串并设置十六进制编码(再次,我在谈论节点 js),它不会对空文件做任何事情。即使是十六进制编辑也表明那里根本什么都没有。它是怎么运行的?帮帮我吧!
当在编程语言 (例如,javascript)中我们向字符串写入内容或添加字符时(a = ''; a += 'b';),那么它以什么编码存储在内存本身中?
如果只是一堆位,为什么在打开文本文件(Node js)时指定编码?
为什么保存时要指定编码?也许是为了使内存中的位序列保留在这种特定的编码中?但事实并非如此。毕竟,如果我写一个字符串并设置十六进制编码(再次,我在谈论节点 js),它不会对空文件做任何事情。即使是十六进制编辑也表明那里根本什么都没有。它是怎么运行的?帮帮我吧!
您对“编码”的概念有点误解。
编码是“在将它们保存到文件时不表示位序列”。内存中的位被保存到文件中的位中,无需任何重新编码。
像许多其他高级语言一样,Nodejs 将字符串视为“内存中的位”,而不是字符序列(字符,而不是字节!)。所有字符串操作 (
a = ''; a += 'b';
) 都将字符串作为输入并返回字符串。是的,同时在内部的某个地方,字节在内存中移动(这是某种编码中字符串的表示)。但同时,就语言和平台而言,您使用字符串与使用字符串完全一样,而不是使用字节数组。
所以答案是——不管是哪一个,这些都是字符串内部实现的特性,这并不影响使用字符串的结果。
字符串是字符序列,而不是“来自内存的位序列”。
就其本身而言,仅当将字符串保存到文件(磁盘上的字节数组),通过网络传输字符串(作为字节数组)时,才需要将其显式转换为特定编码的位,或者在尝试像字节一样显式使用它时。
这就是为什么您必须在打开文件时指定编码 - 以明确指定如何将字符串(字符序列)转换为文件中的字节,反之亦然。
是的,虽然在实现内部的某个地方,它实际上从“使用存储编码的字符串作为字节”转码为“保存文件时指定的字符串作为字节”,但这是该机制的内部实现。从平台的角度来看 - 您将字符串(字符)作为字节保存到磁盘。
如果只是一堆位,为什么在打开文本文件(Node js)时指定编码?
但是这组位是什么字母(谈论一组字节可能更好)——这正是由编码决定的。编码正是一个字母和一组字节的对应关系。并且同一组可以根据编码显示完全不同的文本。