Как два визуально идентичных фрагмента текста могут отличаться от буфера обмена? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть возвышенный документ с двумя одинаковыми путями к файлам (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 голосов
/ 22 февраля 2019

Мне удалось решить эту проблему с помощью следующего потока

Как удалить недопустимые символы UTF-8 из строки JavaScript?

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

Это то, что я посмотрелв начале, но, должно быть, использовал его неправильно.

0 голосов
/ 17 февраля 2019

Если вы cat ваш файл в терминале (MacOS) bash, вы получите идентичные строки.Запуск encguess examplefile.txt скажет вам формат UTF-8.Открытие в нем в SublimeText 3 с кодировкой UTF-8 также покажет вам идентичные строки.

Но если вы переключитесь на кодировку Western (Windows 1252) , тогда вы получите те же неправильные символы, что и в вашем примере.Поэтому я полагаю, что вы используете неправильную кодировку для просмотра вашего файла.

Как переключить кодировку в SublimeText 3: File => Reopen With Encoding => Выберите кодировку (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);
0 голосов
/ 17 февраля 2019

Ваша первая строка содержит несколько символов двунаправленной маркировки Unicode: U + 2068 и U + 2069.Вы можете использовать функцию ord в Python, чтобы проверить следующее:

>>> [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.

0 голосов
/ 17 февраля 2019

Я бы рекомендовал взглянуть на использование регулярных выражений для удаления всех не алфавитно-цифровых символов.

См. https://stackoverflow.com/a/7225734/9899022

Поскольку вставленный текст и дополнительные символы уже представлены в строковом формате, попытка разобрать его в JSON или вызвать .toString () ничего не изменит в переменной.

...