【问题标题】:GetByteCount for UTF8 string in javascript? [duplicate]javascript中UTF8字符串的GetByteCount? [复制]
【发布时间】:2020-02-26 13:50:05
【问题描述】:

我使用这个 C# 代码找出我的字符串有多少字节:

private void CalculateBytes(string text)
{
    string s = Convert.ToString(text);
    int len = Encoding.UTF8.GetByteCount(s);
}

但我不知道如何在 javascript 中做同样的事情。如何在 javascript 中计算字符串的字节数?

更新:

TextEncoder() 和 Buffer 不工作。我收到一条错误消息:

“错误”:{ "错误": "JavascriptException", "消息": "JavascriptException", "StackTrace": "ReferenceError: 在 getBinarySize (BFD0A-main.js:763:5) 处未定义缓冲区\n 在 handlers.GetBytesFromText (BFD0A-main.js:756:24)\n 在 Object.invokeFunction (脚本:116:33)" }

var text = "Text"; 
var bytes = (new TextEncoder().encode(text)).length;

Buffer.byteLength(text, 'utf8'))

我使用 Microsoft PlayFab 云脚本:https://docs.microsoft.com/en-us/gaming/playfab/features/automation/cloudscript/quickstart

【问题讨论】:

  • @mbojko 未提供 OP 要求的信息。
  • 为此,有必要从字符串中的 UTF-16 序列构造一个 UTF-8 代码序列列表,并在此过程中显式检测代理 UTF-16 对。跨度>

标签: javascript c#


【解决方案1】:

您可以使用TextEncoder.Encode 函数,然后获取它的长度。

var text = "Text"; 
var bytes = (new TextEncoder().encode(text)).length;
document.write("Number of bytes: " + bytes);

正如在 cmets 中指出的那样,您需要 polyfill 才能在 IE11 或 Edge 中工作。

更新:https://stackoverflow.com/a/5015930/2098773找到的替代解决方案

function getUTF8Length(string) {
    var utf8length = 0;
    for (var n = 0; n < string.length; n++) {
        var c = string.charCodeAt(n);
        if (c < 128) {
            utf8length++;
        }
        else if((c > 127) && (c < 2048)) {
            utf8length = utf8length+2;
        }
        else {
            utf8length = utf8length+3;
        }
    }
    return utf8length;
 }
 
 document.write(getUTF8Length("Test"));

【讨论】:

  • 这是正确的,虽然它在 Edge 和 IE11 中不受支持。
  • 对于 MS 浏览器,您需要 polyfill
  • 它不工作。我收到此错误消息:“错误”:{“错误”:“JavascriptException”,“消息”:“JavascriptException”,“StackTrace”:“ReferenceError:TextEncoder 未在 GetStringBytes 处定义\n (BFD0A-main.js:769 :17)\n 在 handlers.GetBytesFromText (BFD0A-main.js:755:26)\n 在 Object.invokeFunction (Script:116:33)" }
  • @Tobey60 我用从stackoverflow.com/a/5015930/2098773找到的sn-p更新了解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多