【发布时间】:2011-01-05 12:12:58
【问题描述】:
String.fromCharCode(72) 给出 H。如何从 char H 中获取数字 72?
【问题讨论】:
-
问题中的代码是我来这里的目的,而不是答案。谢谢!
标签: javascript char reverse
String.fromCharCode(72) 给出 H。如何从 char H 中获取数字 72?
【问题讨论】:
标签: javascript char reverse
'H'.charCodeAt(0)
【讨论】:
String.fromCharCode(2974).charCodeAt(0),你会得到什么? (它对我有用。)也许你的编辑器和/或源文件不是 Unicode 友好的。
使用 charCodeAt:
var str = 'H';
var charcode = str.charCodeAt(0);
【讨论】:
@Silvio 的答案仅适用于高达 0xFFFF 的代码点(这最终是 String.fromCharCode 可以输出的最大值)。你不能总是假设一个字符的长度是一:
'?'.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"
【讨论】:
您可以像这样定义自己的全局函数:
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 对象提要的方法。
所以要获取 char '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'
【讨论】: