我正在尝试使用不可见的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上,您会看到以下内容:
方框字符中的“ MV”是什么?这是我选择的不可见角色所特有的吗?还是iOS对隐形Unicode做了一些时髦的事情?
答案 0 :(得分:0)
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: ‌‌‌​​‌​‌‌​‌‌‌‌‌‌​​​‌​‌‌​‌‌‌‌
反之(解码回ASCII):
var decodeInvisibleBinary = function(str) {
var binaryString = '';
var parts = str.split('Ȁ');
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('‌‌‌​​‌​‌‌​‌‌‌‌‌‌​​​‌​‌‌​‌‌‌‌');
// outputs: robo