"String.fromCharCode(72)" 可以得到字母 H。如何从字母 H 获得数字 72?
'H'.charCodeAt(0)
String.fromCharCode(2974).charCodeAt(0)
,你会得到什么?(这对我有效。)也许你的编辑器和/或源文件不支持Unicode。 - Lightness Races in Orbit使用 charCodeAt:
var str = 'H';
var charcode = str.charCodeAt(0);
@Silvio的答案只适用于编码点最大到0xFFFF的情况(这也是String.fromCharCode可以输出的最大值)。你不能总是假设字符的长度为1:
''.length
-> 2
这里有一个可行的方案:
var utf16ToDig = function(s) {
var length = s.length;
var index = -1;
var result = "";
var hex;
while (++index < length) {
hex = s.charCodeAt(index).toString(16).toUpperCase();
result += ('0000' + hex).slice(-4);
}
return parseInt(result, 16);
}
如何使用它:
utf16ToDig('').toString(16)
-> "d800df30"
(Inspiration from https://mothereff.in/utf-8)
function CHR(ord)
{
return String.fromCharCode(ord);
}
function ORD(chr)
{
return chr.charCodeAt(0);
}
var mySTR = CHR(72);
或者
var myNUM = ORD('H');
String.fromCharCode
可以接受多个参数,因此以下写法是合法的:
const binaryArray = [10, 24] // ...
str = String.fromCharCode(...binaryArray)
如果你正在寻找与此相反的内容(就像我一样),这可能会很有用:
const binaryArray = str
.split('')
.reduce((acc, next) =>
[...acc, next.charCodeAt(0)],
[]
)
如果您需要考虑编码,请注意String
对象的charCodeAt
方法将默认使用utf16编码。您可以使用string_decoder
对象和Node.js Buffer
对象的编码参数来应用特定的编码。
charCodeAt
方法仅提供ascii/utf-16编码,即使是utf-8编码的String
对象也是如此:
str=new String(new Buffer([195,169]))
// -> [String: 'é']
str.charCodeAt(0)
// -> 233
使用fromCharCode
构建字符串不正确,因为它期望UTF-16:
myStr=String.fromCharCode(50089, 65, 233)
// -> '쎩Aé'
Buffer.from(myStr, 'utf-8')
// -> <Buffer ec 8e a9 41 c3 a9>
Buffer.from(myStr, 'ascii')
// -> <Buffer a9 41 e9>
myStr.charCodeAt(0)
// -> 50089
myStr.charCodeAt(2)
// -> 233
这里有一个简单的例子,用于编码和解码UTF8字节和ASCII字节:
var dec=new string_decoder.StringDecoder('utf-8');
dec.write(Buffer.from([65,67,195,169,98]));
// -> 'ACéb'
var theBytes=new Buffer('aéé','utf-8');
// -> <Buffer 61 c3 a9 c3 a9>
var dec=new string_decoder.StringDecoder('ascii')
dec.write(Buffer.from([65,67,195,169,98]))
// -> 'ACC)b'
var theBytes=new Buffer('aéé','ascii')
// -> <Buffer 61 e9 e9>
StringDecoder.write
方法将从提供的字节缓冲区返回一个 String
对象。
Buffer
对象的编码参数为您提供了一种获取以提供的字符串编码的字节填充的 Buffer
对象的方法。
因此,要获取字符 'H' 的 ASCII 编码:
new Buffer('H','ascii');
// -> <Buffer 48>
new Buffer('H','ascii')[0];
// -> 72
这样,您也可以像这样处理多字节编码字符:
new Buffer('é','ascii');
// -> <Buffer e9>
arr=new Buffer('é','ascii');
// -> <Buffer e9>
code=arr.readUIntBE(0,arr.length);
// -> 233
code.toString(16);
// -> 'e9'
new Buffer('é','utf-8');
// -> <Buffer c3 a9>
arr=new Buffer('é','utf-8');
// -> <Buffer c3 a9>
code=arr.readUIntBE(0,arr.length);
// -> 50089
code.toString(16)
// -> 'c3a9'