iOS将不可见的Unicode字符显示为包含“ MVS”的虚线框

时间:2019-05-08 19:49:09

标签: html ios unicode

我正在尝试使用不可见的Unicode字符给文本加水印,以便在有人将文本复制/粘贴到其他地方时提供其起源的线索。

在台式机上运行良好,但有人指出,在iOS上,它显示了一个我从未见过的奇怪的“ MVS”字符(而且似乎在搜索中找不到任何引用)。

An example is here,使用蒙古文VOWEL分隔符(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

方框字符中的“ MV”是什么?这是我选择的不可见角色所特有的吗?还是iOS对隐形Unicode做了一些时髦的事情?

1 个答案:

答案 0 :(得分:0)

MONGOLIAN VOWEL SEPARATOR在iOS上不是不可见的。我已将0切换为ZERO WIDTH SPACEU+200B),将1切换为ZERO WIDTH NON-JOINERU+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