字符与Unicode、html实体编码互转
本帖最后由 马黑黑 于 2024-1-24 17:59 编辑 <br /><br /><style>.wrap p { margin: 10px 0; }
.mama { margin: 20px auto; width: 100%; padding: 10px; display: grid; grid-template-columns: 350px auto 350px; place-items: center; gap: 10px; }
.mama textarea { padding: 10px; width: 320px; height: 200px; resize: none; font-size: 20px; }
mark { background: lightblue; padding: 2px 6px; }
#s2d, #d2s { display: none; }
.wrap input { accent-color: red; }
</style>
<div class="wrap">
<div>
<input id="s_u" name="rd" type="radio" value="0" checked /><label for="s_u">字符↔Unicode</label>
<input id="s_h" name="rd" type="radio" value="1" /><label for="s_h">字符↔html实体</label>
</div>
<div class="mama">
<div><textarea id="txtS" placeholder="普通字符"></textarea></div>
<div>
<p><button id="s2u" title="转Unicode">>></button></p>
<p><button id="u2s" title="Unicode转字符"><<</button></p>
<p><button id="s2d" title="转html实体">>></button></p>
<p><button id="d2s" title="html实体转字符"><<</button></p>
</div>
<div><textarea id="txtU" placeholder="Unicode编码"></textarea></div>
</div>
<p>[说明]</p>
<p>任意字符均可转为Unicode编码和html实体编码。Unicode编码以<mark>\u编码</mark>方式输出【例:\u1f60a】,html实体编码以<mark>&#编码;</mark>方式输出(例:&#128522;)。</p>
<p>Unicode转字符支持的编码表达式有:<mark>\u编码</mark>、<mark>+u编码</mark>、<mark>+U编码</mark>、<mark>0x编码</mark>、<mark>0X编码</mark>,无效的编码表达式将保留原样。</p>
<p>html实体编码转字符支持的编码格式有:有效的<mark>纯数字</mark>【例:128522;】、<mark>带&#前缀的数字</mark>【例:&#128522;】,每一个单位用分号隔开【例:&#128522;&#129426;】</p>
<p>支持emoji转Unicode和html实体编码,例如:😺🦩</p>
</div>
<script>
s2u.onclick = () => txtU.value = str2unicode(txtS.value.trim());
u2s.onclick = () => txtS.value = unicode2str(txtU.value.trim());
s2d.onclick = () => txtU.value = str2unicode(txtS.value.trim(),false);
d2s.onclick = () => txtS.value = dec2str(txtU.value.trim());
.forEach(item => {
item.onclick = () => {
item.value === '0' ?
(showOrHide(,'block'), showOrHide(,'none'), txtU.setAttribute('placeholder','Unicode编码')) :
(showOrHide(,'block'), showOrHide(,'none', txtU.setAttribute('placeholder','html实体')));
txtU.value = '';
}
});
var str2unicode = (str,hex=true) => {
let u = hex ? [...str].map(str => '\\u' + str.codePointAt(0).toString(16)).join('') : [...str].map(str => '&#' + str.codePointAt(0) + ';').join('');
return u;
}
var unicode2str = (str) => {
let outstr = '';
str = str.replaceAll(/(\\u)|(\\U)|(u\+(\s?))|(U\+\s?)/g,'0x');
var ar = str.split('0x');
ar.forEach(a => {
let num = parseInt(a,16);
outstr += num >= 0 && num <= 0x10FFFF ? String.fromCodePoint(num) : a;
});
return outstr;
};
var dec2str = (str) => {
str = str.replaceAll(/&#|&/g,'');
let ar = str.split(';'), s = '';
ar.forEach(item => {
let num = parseInt(item);
s += num >= 0 && num <= 1114111 ? String.fromCodePoint(num) : item;
});
return s;
};
let rds = document.getElementsByTagName('rd');
var showOrHide = (elms,act='block') => elms.forEach(elm => elm.style.display = act);
</script> emoji和一些其他特殊符号无法显示,需要转为Unicode或html实体符号。以html为例,我们输入一个emoji笑脸,发布前它是正常的,发布后显示出来的是一串字符,这串字符其实就是html实体编码字符,如果我们使用HTML代码来发这串字符,发布后显示出来的就是正常的emoji图标。 这个有意思,原来汉字都对应着相应的编码。
我输入自己的名字,得到的html实体编码就是红影
好吧,复制出来的编码到帖子里直接就的汉字了呢。这个有趣{:4_187:} 再试个这个🦩 马黑黑 发表于 2024-1-24 17:59
emoji和一些其他特殊符号无法显示,需要转为Unicode或html实体符号。以html为例,我们输入一个emoji笑脸, ...
看到了,试了个emoji出来的就是字符,要到html帖子里才能正常出来的吧。
这个号,可以直接查找emoji的字符了。
本帖最后由 马黑黑 于 2024-1-24 19:24 编辑 <br /><br />红影 发表于 2024-1-24 18:30
看到了,试了个emoji出来的就是字符,要到html帖子里才能正常出来的吧。
这个号,可以直接查找emoji的字 ...
<p>这个要弄清楚什么是HTML,就是发HTML帖子的那种。论坛发帖,默认是ubb模式,要点附加选项里的纯文本+HTML代码才是发的HTML帖子,这个时候,html实体编码字符才会有效。</p>
<p>比如这个:</p>
<p>HTML发帖模式下:🍰</p><p><br></p><p>而下面楼那个,直接在常规编辑模式下粘贴</p> 🍰 起个网名好难 发表于 2024-1-24 18:55
JS现在使用的是utf-16编码,不过es6已经很强大,虽然string length还是对付不了emoji 红影 发表于 2024-1-24 18:19
这个有意思,原来汉字都对应着相应的编码。
我输入自己的名字,得到的html实体编码就是红影
...
Unicode编码的目标是将全世界所有的文字符号进行统一编码,汉字早就拥有Unicode编码 马黑黑 发表于 2024-1-24 19:23
本帖最后由 马黑黑 于 2024-1-24 19:24 编辑
这个要弄清楚什么是HTML,就是发HTML帖子的那种。论坛发 ...
嗯嗯,看到了,需要勾选才能显示出来呢。{:4_187:} 红影 发表于 2024-1-24 21:09
嗯嗯,看到了,需要勾选才能显示出来呢。
都到了能做HTML帖子了,还能糊涂 马黑黑 发表于 2024-1-24 19:29
Unicode编码的目标是将全世界所有的文字符号进行统一编码,汉字早就拥有Unicode编码
那以后可以借助这个,让全世界的人交流时没有语言障碍了呢。 红影 发表于 2024-1-24 21:10
那以后可以借助这个,让全世界的人交流时没有语言障碍了呢。
早就这样了:任何区域访问中国的网站,只要使用UTF-8编码的,都能正确显示汉字。UTF-8能正确呈现Unicode字符。 马黑黑 发表于 2024-1-24 21:14
早就这样了:任何区域访问中国的网站,只要使用UTF-8编码的,都能正确显示汉字。UTF-8能正确呈现Unicode ...
那可真方便呢{:4_204:} 马黑黑 发表于 2024-1-24 21:10
都到了能做HTML帖子了,还能糊涂
还是有些东西不清楚啊{:4_173:} 红影 发表于 2024-1-24 22:01
还是有些东西不清楚啊
{:4_203:} 红影 发表于 2024-1-24 22:00
那可真方便呢
unicode是上个世纪末就出来的东东 马黑黑 发表于 2024-1-24 22:08
没办法,人笨就是这样{:4_173:}