Jade Dungeon

Vim-Wiki中使用Unicode字符

配套Javascript脚本

为了在VimWiki中使用Unicode字符, 我们在网页模板的JS中定义了一个自定义标签esp-unicode

jadeUtils.initCustomElements = function () {

	/** 创建自定义标签,*/
	class EscapeUnicode extends HTMLElement {
		constructor() {
			super();
			let oldHtml = this.innerHTML;
			this.innerHTML = oldHtml.replaceAll(/(&#x?[0-9a-fA-F]{1,6};)/m, (str) => {
				// console.log(pam); console.log(a); return '____';
				return str.replace('&','&');
			});
		}
	}

	/** 创建自定义标签必须要有一个连字符*/
	customElements.define('esp-unicode', EscapeUnicode);

};

这样在wiki文件中就可以用自定义标签显示字符了:

<esp-unicode>&#x26f5;</esp-unicode>

显示为:&#9973;

显示为:&#x26f5;

查找unicode的代码

  • 如果要查找常用的Unicode字符可以在这里查找:https://symbl.cc/cn/
  • 把上面查找到的字符复制到这个工具里可以看它的编码:https://unicode.yunser.com/unicode

Unicode在HTML、CSS、Javascript中不同的显示

Unicode的编码在HTML中以10进制表示或16进制表示都有,在Javascript与CSS中以16进制表示。

  • Javascript语法:\u + 16进制编码,如:\u5b89
  • CSS语法:\ + 16进制编码,如:\5b89
  • HTML语法:&# + 10进制编码 + ;,如:&#9973; 或是&#x + 16进制编码 + ;,如:&#x26f5

JavaScript中,可以使用charCodeAt()或者codePointAt()方法来获取字符的 Unicode 码,结果用十进制表示:

'安'.charCodeAt ();  // 23433
'安'.codePointAt();  // 23433

由于获取到的是十进制数,所有如果想在 js 和 css 里面用的话, 就需要用toString(16)转 16 进制,然后再做进一步处理了:

// 输出字符串:"\u8317"
var unicode = '\\u' + '茗'.charCodeAt().toString(16);
// 输出汉字:"茗"
JSON.parse('"' + unicode + '"');
// 或者使用eval解析也可以
eval('"' + unicode + '"');

另一种方法,就将十进制Unicode码为36213的字符转换为字符串,然后将此字符串输出:

String.fromCharCode(36213);

在现在的wiki类net.jadedungeon.wiki里, 提供了两个按Unicode字符查找对应十进制与十六进制编码的工具:

self.transUnicodeWikiInHex = function (c) {
	return "<esp-unicode>&#x" 
		+ c.charCodeAt().toString(16) 
		+ ";</esp-unicode>";
};

self.transUnicodeWikiInDec = function (c) {
	return "<esp-unicode>&#"  
		+ c.charCodeAt()
		+ ";</esp-unicode>";
};

可以在控制台里直接调用:


page.transUnicodeWikiInDec('⛵');
> "<esp-unicode>&#9973;</esp-unicode>"

page.transUnicodeWikiInHex('⛵');
> "<esp-unicode>&#x26f5;</esp-unicode>"