iOS отображает невидимые символы Unicode в виде пунктирной рамки, содержащей «mvs» - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь использовать невидимые символы Юникода для нанесения водяных знаков на текст, чтобы дать подсказку о его происхождении, когда кто-то копирует / вставляет его в другое место.

Он отлично работает на настольном компьютере, но было отмечено, что на iOS он отображает странный символ «mvs», которого я никогда раньше не видел (и, похоже, не могу найти ссылки в моих поисках).

Пример приведен здесь с использованием монгольского разделителя гласных (U + 180E) и нулевого пробела (U + 200B). Я скопировал / вставил их и здесь через iOS, но не уверен, что произойдет на рабочем столе:

Yes, there is a X11 way to do this:​​​᠎᠎​᠎​​᠎​​​​​​᠎᠎᠎​᠎​​᠎​​​​

Scroll down and log the OS.
Re-go to your tools/Gcc Terminal/}Tools Configuration.
Include the x11 usr library9

Символы в конце строки невидимы на рабочем столе, но на iOS вы видите это:

iOS screenshot

Что это за «мвс» в символе коробки? Это что-то особенное для невидимых персонажей, которых я выбрал? Или iOS делает что-то необычное с невидимым Unicode?

1 Ответ

0 голосов
/ 09 мая 2019

MONGOLIAN VOWEL SEPARATOR невидим на iOS.Я переключился на 0, представленный ZERO WIDTH SPACE (U+200B), а 1 - ZERO WIDTH NON-JOINER (U+200C).

Следующий фрагмент должен позволить вам преобразовать произвольную строку ASCIIв эту кодировку:

var encodeInvisibleBinary = function(str) {
    var digits = [
        '​',  // ZERO WIDTH SPACE
        '‌'   // ZERO WIDTH NON-JOINER
    ];

    var binary = [];
    for (var i = 0; i<str.length; i++) {
        binary = binary.concat(str[i].charCodeAt(0).toString(2).split(''));
    }
    binary = _.map(binary, function(c) {
        return digits[c];
    });
    return binary.join('');
};

encodeInvisibleBinary('robo');
// outputs: &#x200c;&#x200c;&#x200c;&#x200b;&#x200b;&#x200c;&#x200b;&#x200c;&#x200c;&#x200b;&#x200c;&#x200c;&#x200c;&#x200c;&#x200c;&#x200c;&#x200b;&#x200b;&#x200b;&#x200c;&#x200b;&#x200c;&#x200c;&#x200b;&#x200c;&#x200c;&#x200c;&#x200c;

и наоборот (декодирование обратно в ASCII):

var decodeInvisibleBinary = function(str) {
    var binaryString = '';
    var parts = str.split('&#x200');
    var i;
    for(i=0; i<parts.length; i++) {
        if(parts[i] == 'b;') binaryString += '0';
        if(parts[i] == 'c;') binaryString += '1';
    }
    var binaryChars = binaryString.split(/([01]{7})/);
    var ret = '';
    for(i=0; i<binaryChars.length; i++) {
        ret += String.fromCharCode(parseInt(binaryChars[i], 2));
    }
    return ret;
};

decodeInvisibleBinary('&#x200c;&#x200c;&#x200c;&#x200b;&#x200b;&#x200c;&#x200b;&#x200c;&#x200c;&#x200b;&#x200c;&#x200c;&#x200c;&#x200c;&#x200c;&#x200c;&#x200b;&#x200b;&#x200b;&#x200c;&#x200b;&#x200c;&#x200c;&#x200b;&#x200c;&#x200c;&#x200c;&#x200c;');
// outputs: robo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...