我有一个javascript字符串,当从UTF-8服务器发送时,大约500K.如何在JavaScript中说出它的大小?
我知道JavaScript使用UCS-2,所以这意味着每个字符2个字节.但是,它是否依赖于JavaScript实现?或者在页面编码或内容类型?
如何获取nodejs中的字符串长度(以字节为单位)?如果我有一个字符串,像这样:äáöü那么str.length将返回4.但是如何得到它,字符串形成了多少字节?
提前致谢
在回答另一个问题时,我意识到我的Javascript/DOM知识已经变得有点过时,因为我仍在使用escape/ unescape编码URL组件的内容,而看起来我现在应该使用encodeURIComponent/ decodeURIComponent代替.
我想知道的是什么错escape/ unescape?有一些模糊的建议,围绕Unicode字符存在某种问题,但我找不到任何明确的解释.
我的网络体验相当有偏见,几乎所有这些都是编写与Internet Explorer绑定的大型Intranet应用程序.这涉及到大量使用escape/ unescape并且所涉及的应用程序已经完全支持Unicode多年了.
那么escape/ unescape应该有什么Unicode问题呢?有没有人有任何测试用例来证明这些问题?
我怎么知道在大小(千字节,兆字节)方面通过线路传输了多少数据?
举个例子
{
'a': 1,
'b': 2
}
Run Code Online (Sandbox Code Playgroud)
我如何知道此有效负载的大小是多少,而不是对象中的长度或项目
UPDATE
content-encoding:gzip
content-type:application/json
Transfer-Encoding:chunked
vary:Accept-Encoding
Run Code Online (Sandbox Code Playgroud) 我正在与一个接受最大 5KB 字符串的 api 交互。
我想将一个可能超过 5KB 的字符串分成小于 5KB 的块。
然后我打算将每个传递smaller-than-5kb-string给 api 端点,并在所有请求完成后执行进一步的操作,可能使用类似的东西:
await Promise.all([get_thing_from_api(string_1), get_thing_from_api(string_2), get_thing_from_api(string_3)])
Run Code Online (Sandbox Code Playgroud)
我读过字符串中的字符可以在 1 - 4 个字节之间。
因此,要计算以字节为单位的字符串长度,我们可以使用:
// in Node, string is UTF-8
Buffer.byteLength("here is some text");
// in Javascript
new Blob(["here is some text"]).size
Run Code Online (Sandbox Code Playgroud)
来源:
https : //stackoverflow.com/a/56026151
/sf/answers/3657785841/
我搜索"how to split strings into chunks of a certain size"与将字符串拆分为特定字符长度而不是字节长度的字符串相关的返回结果,例如:
// in Node, string is UTF-8
Buffer.byteLength("here is some text");
// in Javascript
new Blob(["here is some text"]).size
Run Code Online (Sandbox Code Playgroud)
来源:
https …
我正在用纯C89编写一个自定义的跨平台简约TCP服务器.(但我也会接受POSIX特定的答案.)
服务器使用UTF-8字符串,但从不查看它们.它将所有字符串视为不可变二进制blob.
但是现在我需要接受来自客户端的UTF-8字符串,它不知道如何以字节为单位计算它们的大小.客户端只能以字符传输字符串长度.(更新:客户端是在JavaScript中,"字符长度"实际上是任何String.length()返回.我假设它是实际的UTF-8字符,而不是其他东西.)
我不想在我的小服务器上添加大量依赖项.是否有一种强大而简洁的方式来读取此数据报?(为了这个问题,让我们说它是从中读取的FILE *.)
U<CRLF> ; data type marker (actually read by dispatching code)
<SIZE><CRLF> ; UTF-8 string size in characters
<DATA><CRLF> ; data blob
Run Code Online (Sandbox Code Playgroud)
例:
U
7
??????!
Run Code Online (Sandbox Code Playgroud)
更新:
一批数据可以包含多个数据报,因此近似读取不起作用,我需要读取确切数量的字符.
实际的UTF-8数据可能包含任何字符,因此我不能选择一个字符作为终结符 - 我不希望在数据中转移它.
function LikesDislikes () {
$.ajax({
url: 'http://gdata.youtube.com/feeds/api/videos/keDZXXDxK1c/ratings',
type:"POST",
data: '<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
xmlns:yt="http://gdata.youtube.com/schemas/2007">
<yt:rating value="like"/>
</entry>',
headers: {
"Content-Type":"application/atom+xml",
"Content-Length":,
"Authorization":"Bearer ya29.AHES6ZQ59RrQgujZmIjssBdYlwwLVrpCodnirdLROi7-g7U",
"X-GData-Key":"key=AIzaSyAPrtP2Tq4m5WVInCvCWptVAKPhQ4SQNZA",
"GData-Version":"2"
},
// Content-Type:"application/atom+xml",
error: function() { alert("No data found."); },
// contentType: "text/xml",
success: function (response) {
alert('response:' + response);
}
});
}
Run Code Online (Sandbox Code Playgroud)
如何计算Content-Length上面的代码?
我遇到了计算 unicode 字符的问题。我需要计算总的组合 unicode 字符。
以这个字符为例:
???
如果你.length在这个字符串上使用属性,它会给你 3。这在技术上是正确的,因为它是
?,?和?
但是,放入???文本区域,然后您通过使用箭头键意识到它被视为一个字符。只有当您使用退格键时,您才会意识到有 3 个字符。
编辑:同样对于您的测试用例,请考虑它可能是一个词。它可能是这样的,
??????
这应该给 2 with .length,但给 6
当您想在输入元素中获取或设置当前插入符号位置时,这是一个问题。
我正在使用此代码的修改版本(更新:此答案已更新为使用正确的代码,但此问题仍然有价值,因为它包含有关此问题的测试用例和讨论)在字符串化后存储单个对象同步存储中的分块键。
请注意,同步存储具有每个项目的最大配额大小。所以,我有这些maxLengthPerItem和maxValueLength变量。
function lengthInUtf8Bytes(str) {
// by: https://stackoverflow.com/a/5515960/2675672
// Matches only the 10.. bytes that are non-initial characters in a multi-byte sequence.
var m = encodeURIComponent(str).match(/%[89ABab]/g);
return str.length + (m ? m.length : 0);
}
function syncStore(key, objectToStore, callback) {
var jsonstr = JSON.stringify(objectToStore), i = 0, storageObj = {},
// (note: QUOTA_BYTES_PER_ITEM only on sync storage)
// subtract two for the quotes added by stringification
// extra -5 to err on …Run Code Online (Sandbox Code Playgroud)