文本的两个视觉上相同的位如何与剪贴板不同?

时间:2019-02-16 22:02:21

标签: javascript string text sublimetext2 clipboard

我有一个包含两个相同文件路径的崇高文档(2条单独的行),如果我复制一个我的应用程序功能正常,如果我复制另一个我的应用程序功能正常,则不行。

当我选择一行并执行cmd + d时,按照正常功能,您会期望sublime突出显示这两行。它不是。在VC代码中也是如此,因此这两行有些不同。

我尝试了myData.toString() 我尝试了JSON.parse,但操作不顺利,我无法弄清楚

在违规行。

/Volumes/Macintosh HD/Archive/Work/AE_Scripting/⁨Resources⁩/⁨CEP-Resources-master⁩/⁨CEP_8.x⁩/⁨Documentation

-Works
/Volumes/Macintosh HD/Archive/Work/AE_Scripting/Resources/CEP-Resources-master/CEP_8.x/Documentation

在上传本文的示例文件后,我现在有了一些新信息,如您在此处看到的

http://gravitystaging.com/uploadarea/test/examplefile.txt

两行现在都显示为

/Volumes/Macintosh HD/Archive/Work/AE_Scripting/â¨Resourcesâ©/â¨CEP-Resources-masterâ©/â¨CEP_8.xâ©/â¨Documentation

-Works
/Volumes/Macintosh HD/Archive/Work/AE_Scripting/Resources/CEP-Resources-master/CEP_8.x/Documentation

尽管在任何编辑器中它们看起来都是正常且相同的。因此,我该如何处理该字符串以将其删除。

4 个答案:

答案 0 :(得分:1)

您的第一个字符串中包含一些Unicode双向标记字符:U + 2068和U + 2069。您可以在Python中使用ord函数来检查以下内容:

>>> [ord(x) for x in '/Volumes/Macintosh HD/Archive/Work/AE_Scripting/⁨Resources⁩/⁨CEP-Resources-master⁩/⁨CEP_8.x⁩/⁨Documentation']
[47, 86, 111, 108, 117, 109, 101, 115, 47, 77, 97, 99, 105, 110, 116, 111, 115, 104, 32, 72, 68, 47, 65, 114, 99, 104, 105, 118, 101, 47, 87, 111, 114, 107, 47, 65, 69, 95, 83, 99, 114, 105, 112, 116, 105, 110, 103, 47, 8296, 82, 101, 115, 111, 117, 114, 99, 101, 115, 8297, 47, 8296, 67, 69, 80, 45, 82, 101, 115, 111, 117, 114, 99, 101, 115, 45, 109, 97, 115, 116, 101, 114, 8297, 47, 8296, 67, 69, 80, 95, 56, 46, 120, 8297, 47, 8296, 68, 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110]

看到有8000左右的东西吗?这些是您不需要的Unicode标记。

如果您只想使用纯ASCII,这就是我在Python中的处理方式:

''.join(c for c in my_string if ord(c) < 256)

这会删除高于U + 00FF的所有内容。

答案 1 :(得分:0)

我建议您看看使用正则表达式删除所有非字母数字字符。

请参见https://stackoverflow.com/a/7225734/9899022

由于粘贴的文本和其他字符已经是字符串格式,因此尝试将其解析为JSON或调用.toString()不会更改变量的任何内容。

答案 2 :(得分:0)

如果您在(MacOS)bash终端中cat进行文件操作,您将得到相同的行。运行encguess examplefile.txt将告诉您格式为UTF-8。用UTF-8编码在SublimeText 3中打开它也将显示相同的行。

但是,如果您切换到 Western(Windows 1252)编码,则会得到与示例中完全相同的错误符号。所以我想您使用错误的编码来查看文件。

如何在SublimeText 3中切换编码: 文件=>使用编码重新打开=>选择您的编码(UTF-8)

修改
如果要从给定的字符串中删除错误的字符,可以使用String.replace()

str = "/Volumes/Macintosh HD/Archive/Work/AE_Scripting/â¨Resourcesâ©/â¨CEP-Resources-masterâ©/â¨CEP_8.xâ©/â¨Documentation"

console.log("Before: ", str);

str = str.replace(/(â©)|(â¨)/g, "");
console.log("After: ", str);

答案 3 :(得分:0)

我设法通过以下线程解决了这个问题

How to remove invalid UTF-8 characters from a JavaScript string?

function cleanString(input) {
    var output = "";
    for (var i=0; i<input.length; i++) {
        if (input.charCodeAt(i) <= 127) {
            output += input.charAt(i);
        }
    }
    return output;
}

我很早就看过它,但是一定是使用不当。