GitHub Flavored Markdown
今天研究了一天Markdown移動(dòng)端和pc端統(tǒng)一實(shí)現(xiàn)方式引润,由于以前有搞過移動(dòng)端富文本編輯器,搞Markdown簡(jiǎn)單多了;
其中GFM的表情語法不錯(cuò),比如笑臉:smile:牍鞠,準(zhǔn)備采用一下。
又想到了手機(jī)輸入法輸入表情瀏覽器頁面接收到的是一個(gè)字符评姨,如果能轉(zhuǎn)換成:smile:就更能統(tǒng)一表現(xiàn)了难述,就像微信Android怎么輸入輸入法里面奇丑的emoji到了微信里面都是微信自帶的好看的emoji圖標(biāo),其實(shí)這個(gè)轉(zhuǎn)換好幾年前就有開始了解吐句,不過沒有什么進(jìn)展胁后。
編碼問題
前幾天剛好有需求要把emoji對(duì)應(yīng)的Unicode編碼轉(zhuǎn)換成文字,比如1f601對(duì)應(yīng)的這個(gè)笑臉??蕴侧,但沒有找到C#的把1f601轉(zhuǎn)換成文字的方法择同,用Encoding.Unicode怎么轉(zhuǎn)換都不對(duì)两入,最后直接復(fù)制emoji字符净宵,Visual Studio里面竟然直接顯示出來了,那就直接用字符吧裹纳,都不用轉(zhuǎn)換了择葡,然后不了了之了。
今天搞Markdown編輯器剃氧,由于前面GFM的原因敏储,又對(duì)編碼進(jìn)行測(cè)試,沒查到什么靠譜資料朋鞍,到時(shí)找到很多emoji和Unicode對(duì)照表已添,https://apps.timwhitlock.info/emoji/tables/unicode
拿一個(gè)笑臉https://apps.timwhitlock.info/unicode/inspect/hex/1F601
開刀~
正確姿勢(shì)
【C#】
Encoding.UTF32.GetBytes("??")
->
["1", "f6", "1", "0"]
【js】
"??".codePointAt(0).toString(16)
->
1f601
UTF-32結(jié)果一致
【C#】
Encoding.UTF8.GetBytes("??")
->
["f0", "9f", "98", "81"]
【js】
encodeURIComponent("??")
->
%F0%9F%98%81
UTF-8結(jié)果一致
錯(cuò)誤姿勢(shì)
【C#】
Encoding.Unicode.GetBytes("??")
->
["3d", "d8", "1", "de"]
【js】
"??".codePointAt(0).toString(16)
->
1f601
這個(gè)Unicode反而不一致了
其實(shí)前段時(shí)間一直轉(zhuǎn)換不對(duì),就是錯(cuò)怪Encoding.Unicode了滥酥,C#里面Encoding.Unicode=Little-Endian UTF-16
沒錯(cuò)是UTF-16更舞,四字節(jié)編碼老實(shí)用UTF-32就和瀏覽器結(jié)果一致了。
好開森坎吻,記錄嘚瑟一下
Java是不是這樣就搞不清楚了缆蝉,電腦內(nèi)存小了點(diǎn)就不開Eclipse敲代碼了。
有了正確的轉(zhuǎn)換關(guān)系,不管前端對(duì)用戶輸入進(jìn)行替換還是后端替換都能實(shí)現(xiàn)了刊头。下一步制作GFM emoji名字和Unicode編碼對(duì)照表黍瞧,挑幾十個(gè)emoji放到編輯器菜單,剩余的只提供圖片原杂。
關(guān)鍵是素材GitHub提供了https://github.com/WebpageFX/emoji-cheat-sheet.com/tree/master/public/graphics/emojis
航棱,清晰度還不錯(cuò),手機(jī)上三倍縮放應(yīng)該挺清晰磕道,直接拿來用