jquery .text()和unicode

jan*_*nce 31 html javascript unicode jquery

我想在HTML链接文本中显示"Open Lock"字符.

如果我直接执行它会正确显示<a id="myId">&#x1f512;</a>,但我发现没有办法用jQuery .text()函数改变它,就像在:

 $("#myID").text(openLockText);
Run Code Online (Sandbox Code Playgroud)

我应该在openLockText中添加什么?

Aln*_*tak 38

Javascript内部仅支持UTF-16.

因为这是一个扩展的32位UTF字符(不在"基本多语言平面"中),所以需要插入"UTF-16代理对",这在您链接到的同一页面上有用:

0xD83D 0xDD13
Run Code Online (Sandbox Code Playgroud)

$('#myId').text('\ud83d\udd13');
Run Code Online (Sandbox Code Playgroud)

更多细节可以在RFC 4627中找到,严格来说是JSON的格式.


Poi*_*nty 9

编辑 - 如果它是一个可以用单个UTF-16字符表示的Unicode代码点,那么在这种情况下你可以使用JavaScript转义序列:

$('#foo').text('\uXXXX');
Run Code Online (Sandbox Code Playgroud)

但是,因为您的角色需要更多位,所以这不起作用.可能有可能构造允许字符表示为UTF-16的字节序列,但这很痛苦.我会去的.html().

请注意,并非所有字体都提供像这样的"异国情调"代码点的字形,而且根据我的经验,那些字体提供了令人难以置信的难看的代码点.


Juk*_*ela 8

您可以将字符直接放在那里,作为带引号的字符串,例如

$("#myID").text('');
Run Code Online (Sandbox Code Playgroud)

只要该文件是UTF-8编码并且您正确声明了字符编码.(理论上,您也可以使用UTF-16甚至UTF-32,但不应期望浏览器支持它们.)

虽然根据ECMAScript标准,直接在源文档中支持非BMP字符是可选的,但现代浏览器允许您使用它们.当然,你需要一个可以处理UTF-8的编辑器,你需要一些输入法; 请参阅我的完整Unicode输入实用程序.

这个问题包含一些未经注意的错误:由于id属性值区分大小写,因此拼写myId需要修复myID.OPEN LOCK字符是U + 1F513,而不是U + 1F512,因此引用&#x1f512;会产生错误的字符.

此外,很少有字体包含OPEN LOCK,并且即使系统中的某些字体包含字形,浏览器(尤其是IE)也可能难以找到字形,因此您应该向浏览器提供帮助并声明已知包含该字符的字体列表,按优先顺序排列.例:

<style>
#myID { font-family: Symbola, Quivira, Segoe UI Symbol; }
</style>
<a id="myID">stuff</a>
<script>
 $("#myID").text('');
</script>
Run Code Online (Sandbox Code Playgroud)

非BMP字符在内部表示为代理对,并且可以使用\u该对的组件的符号来编写,但这非常不直观