【问题标题】:Count the length of a string with special chars in Javascript在Javascript中计算带有特殊字符的字符串的长度
【发布时间】:2015-12-27 10:46:59
【问题描述】:

所以,我有一个这样的字符串

"v\xfb\"lgs\"kvjfywmut\x9cr"

我想用 Javascript 找出它的大小。问题是,如果我将它复制到控制台,控制台将取消转义整个字符串。将其转换为:

"vû"lgs"kvjfywmutr"

我不希望这种情况发生。有什么提示/技巧吗?

【问题讨论】:

  • 那个字符串的长度是18,你不能算“转义”吗?
  • "问题是,如果我将它复制到控制台,控制台将取消转义整个字符串。将其转换为:" 不,它不会。它将正确确定字符串中的 18 个字符是vû"lgs"kvjfywmutr。反斜杠不是字符串中的字符,它们是定义字符串中字符的转义序列的一部分。
  • 第一个字符串的长度是我感兴趣的。@adeneo
  • 但是你正在数完所有的字符,其余的都在转义,不能数了。
  • @Venkatraman:所有 个字符(可能)是 UTF-8 字符。和 UTF-16。和 UTF-32。转换格式只是编写相同 Unicode 字符的不同方式。

标签: javascript escaping


【解决方案1】:

如果您想要源字符(包括转义字符)的数量,没有编程方法可以确定,您必须通过查看源代码并计数来确定。

无法以编程方式执行此操作的原因是,一旦它是一个字符串,它就是一个字符串,并且可以使用转义序列来编写同一个字符串有很多很多不同的方式。

例如,这些都定义了相同的字符串:

var s1 = "v\xfb\"lgs\"kvjfywmut\x9cr";
var s2 = 'v\xfb"lgs"kvjfywmut\x9cr';
var s3 = "\x76\xfb\"lgs\"k\x76jfywmut\x9cr";

...但正如您所见,源字符的数量不同。

【讨论】:

  • 是的,我明白了。我认为这是一种以某种方式确定源字符的方法。 :)
  • @Matei:不,除了检查源代码之外别无他法。一旦它是一个字符串,它就是一个字符串,字符串中的任何内容都不会包含隐藏信息,说明使用了哪些转义序列来生成它。
【解决方案2】:

我知道这不是“正确”的答案,但我正在研究同样的问题并想出了一个解决方案。如果将字符串保存在文本文件中并使用 fetch 读取文件,则可以计算字符串的长度,包括转义字符和外引号。

假设你有一个名为“strings.txt”的文件中的字符串:

fetch("strings.txt") // Connect to the URL Endpoint
        .then( // and then
          response => response.text() // take the response file
            .then( // and then...
              data => { // Do something with the data
                // if the file is only one line
                console.log(data.split('\n')[0].length); // 28 for your string

                // If the file has multiple lines                                   
                data.split('\n').forEach(v => console.log(v.length));
                    // 28, 27, 34 for T.J. Crowder's strings
                
              }
            )
        )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    相关资源
    最近更新 更多