两个视觉上相同的文本位与剪贴板有何不同?
How can two visually identical bits of text be different to the clipboard?
我有一个带有两个相同文件路径(2 条单独的行)的 sublime 文档,如果我复制其中一个,我的应用程序功能可以运行,如果我复制另一个,则它不会。
当我 select 一行并执行 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
上传示例文件后 post 我现在有了一些新信息,如您所见
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
尽管在任何编辑器中它们看起来都很正常且相同。那么我该如何处理这个字符串来删除它。
我建议您看看使用正则表达式删除所有非字母数字字符。
见
由于粘贴的文本和其他字符已经是字符串格式,尝试将其解析为 JSON 或调用 .toString() 不会更改变量的任何内容。
如果您在 (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);
您的第一个字符串中有一些 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 的所有内容。
我设法通过以下线程解决了这个问题
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;
}
这是我很早就看过的东西,但一定是用错了。
我有一个带有两个相同文件路径(2 条单独的行)的 sublime 文档,如果我复制其中一个,我的应用程序功能可以运行,如果我复制另一个,则它不会。
当我 select 一行并执行 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
上传示例文件后 post 我现在有了一些新信息,如您所见
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
尽管在任何编辑器中它们看起来都很正常且相同。那么我该如何处理这个字符串来删除它。
我建议您看看使用正则表达式删除所有非字母数字字符。
见
由于粘贴的文本和其他字符已经是字符串格式,尝试将其解析为 JSON 或调用 .toString() 不会更改变量的任何内容。
如果您在 (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);
您的第一个字符串中有一些 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 的所有内容。
我设法通过以下线程解决了这个问题
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;
}
这是我很早就看过的东西,但一定是用错了。