JavaScript中进制和字符编码问题

Posted engeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中进制和字符编码问题相关的知识,希望对你有一定的参考价值。

1、进制:

javascript中允许使用字面量的形式声明不同进制的数字:

var a = 0b10; // 2 声明一个二进制
var b = 010;  // 8 八进制,严格模式下会报错
var c = 10;  // 10 十进制
var d = 0x10 // 16 十六进制

其中八进制字面量在严格模式下会报错,数字超过范围,将会忽略前导 0 ,解析为十进制数字

var f = 08  ;  //8

2、进制之间转换:

调用toString方法,可以在进制之间进行转换。

d.toString(2); //"10000"
d.toString(8); //"20"
d.toString(10);//"16"

3、字符编码

同样JavaScript允许使用字面量的形式声明一个字符串;

var a = ‘a‘; //"a"  字面量声明;
var b = ‘\x61‘;//"a"  使用ASCII码的格式声明一个字符串;\x后面跟的是ASCII 16进制的格式。
var c = ‘\u0061‘ // "a" 使用unicode编码声明的字符串;都是16进制格式。

4、字符编码转换

静态方法:

String.fromCodePoint() ,返回使用指定的代码点序列创建的字符串;

String.fromCodePoint(97) //"a"  十进制的码点,一串 Unicode 编码位置
String.fromCodePoint(0x61) //"a" 十六进制编码位置

String.fromCharCode() ,返回由指定的UTF-16代码单元序列创建的字符串;

String.fromCodePoint(97);// "a"
String.fromCodePoint(0x61); // "a"

两者区别在于fromCharCode参数是UTF-16代码单元的数字。 范围介于0到65535(0xFFFF)之间。 大于0xFFFF的数字将被截断。 不进行有效性检查。

实例方法:

String.prototype.charCodeAt()方法返回0到65535之间的整数,表示给定索引处的UTF-16代码单元;

‘a‘.charCodeAt(0) //97

String.prototype.codePointAt() 方法返回 一个 Unicode 编码点值的非负整数。

‘a‘.codePointAt(0);//97
‘中‘.codePointAt(0);//20013

 

以上是关于JavaScript中进制和字符编码问题的主要内容,如果未能解决你的问题,请参考以下文章

js怎样获取字符ASCII码?

javascript NodeJS:如何将base64编码的字符串解码回二进制?

字符编码基础

javascript 字符串进行 utf8 编码的方法(转)

字符乱码之字符集和字符编码

JavaScript编码encode和decode escape和unescape