javascript将文本utf16与字体信息复制到剪贴板

时间:2018-03-25 07:36:17

标签: javascript browser clipboard rtf

这是演示网站: http://symbolsearch.org/
Summany网站:

  

列出字体,帮助用户支持的所有符号(带标签)   快速查找符号。

我坚持将符号(一个utf-16字符)复制到富文本编辑器(如MS Word)。
某些符号可以直接复制到Word(我的系统已经安装了字体),但有些符号不是(显示为另一个符号)。
例如我复制 asteriskplusquestion MS Word 显示为另一个角色,但如果我将bombfutbolgit复制到 MS Word ,则会按预期显示。
如果我将符号复制到原始文本编辑器(如记事本),并将其复制到Word中,100%按预期显示!

function copyText(id) {
    // clipboard is an object, helping me to write data to clipboard
    var dt = new clipboard.DT();

    // element id='just_symbol' is contain only the symbol string
    dt.setData("text/plain", $('#just_symbol').html());
    // this data contain font info, the font is installed in the system
    dt.setData("text/html", '<font face="@fontCurrent.FontName">' + $('#just_symbol').html() +'</font>');
    clipboard.write(dt);
}

我正在使用剪贴板检查器,当我复制相同的数据形式字符映射(Windows)时,剪贴板检查器显示“富文本格式”字段,可以完美地将数据粘贴到Word。我可以将数据(通过javascript)复制到该字段吗?

1 个答案:

答案 0 :(得分:0)

看起来你正在使用jQuery,它显然无法将表情符号/ Unicode符号转换为HTML实体。 $('#just_symbol').html()保留以Unicode编码的符号。

由于其他网络API(例如XMLSerializer)似乎也无法处理此问题,因此我建议使用https://github.com/mathiasbynens/he之类的内容:

var symbol = $("#just_symbol").text();
var dt = new clipboard.DT();
dt.setData("text/plain", symbol);
dt.setData("text/html", he.encode(symbol));
clipboard.write(dt);

关于RTF

某些应用可能会自动将粘贴的HTML转换为RTF(尽最大可能),但浏览器目前仅支持text/plaintext/html

新的Clipboard API规范将添加更多数据类型,但application/rtf is currently not currently planned。您可以在草稿规格库中请求考虑RTF:https://github.com/w3c/clipboard-apis