李成笔记网

专注域名、站长SEO知识分享与实战技巧

Unicode码点小知识

概念

 # 码点、键码为十进制数值数据
 键码 = 码点 = Unicode键码 

0x

 0xffff => 代表十六进制数据

进制转换

 // 功能:将2-36进制转换为十进制
 // data => 必须是字符串
 // num => 2-36的整数
 parseInt(data,num)
 
 
 // 功能:将十进制(也可其他进制)数值数据转换为2-36进制的字符串
 // data => 十进制(也可其他进制)数值数据
 // num => 2-36的整数
 data.toString(num)

ES5:

 // str => 为字符串类型
 // num => 为整数类型(下标),代表字符串第几个字符。不传参数,默认读取第一个字符
 // 返回指定位置的字符,若指定位置不存在字符,则返回一个空字符
 str.charAt(num)
 
 // str => 为字符串类型
 // num => 为整数类型(下标),代表字符串第几个字符。不传参数,默认读取第一个字符
 // 返回指定位置的字符键码(十进制码点),若指定位置不存在字符,则返回NaN类型
 // 注意:不能正确解析大于65535键码的字符,应该使用ES6中的str.codePointAt来解析
 str.charCodeAt(num)
 
 // unicodeX => 为单独的数字Unicode键码(十进制)
 // 返回字符串
 // 注意:不能正常解析大于65535的Unicode键码,应该使用ES6中的String.fromCodePoint来解析
 String.fromCharCode(unicodeX,[unicodeX,unicodeX,...,unicodeX])

ES6:

 // str => 为字符串类型
 // num => 为整数类型(下标),代表字符串第几个字符。不传参数,默认读取第一个字符
 // 返回指定位置的字符键码(十进制码点),若指定位置不存在字符,则返回undefined类型
 str.codePointAt(num)
 
 // unicodeX => 十进制键码 或者 0x开始的十六进制
 // 返回字符串
 String.fromCodePoint(unicodeX,[unicodeX,unicodeX,...,unicodeX])

ES5 与 ES6比较

 ''.charCodeAt(0)  =>   55357String.fromCharCode("55357")   =>   '\uD83D'
 
 比较:------------------------------------------------------------------------------
 
 ''.codePointAt(0)  =>   128169String.fromCodePoint("128169")   =>   ''

解码十六进制为十进制

 十六进制键码:'0x'+'a'.codePointAt(0).toString(16)
 十进制键码:eval("0x61") => 97 或者 new Function("return 0x61")()

unicode编码

 十六进制Unicode字符串键码:"\\u"+"a".codePointAt().toString(16).padStart(4,0) 
 返回:"\\u0061"
 十进制字符串键码:eval("'\\u0061'")
 注意:直接写 \u 会报错,因为是特殊字符,所以需要转义为 \\u

utf-8编码

 十六进制utf-8字符串键码:"\\x"+"a".codePointAt().toString(16)
 返回:"\\x0061"
 解码字符串:function utf8Decode(str) {return str.replace(/\\x(\w{2,4})/g,(_,$1)=>String.fromCodePoint(parseInt($1,16)))}
 编码字符串:function strToUtf8(str){return [...String(str)].map(i=>"\\x"+i.codePointAt().toString(16)).join("")}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言