当我想要的只是ASCII时,我认为JS给了我Unicode

时间:2015-06-22 20:03:25

标签: javascript unicode ascii

我正在尝试取一个角色并增加或减少它。我正在尝试使用String.fromCharCode来完成此任务。以下内容适用于控制台

'Na' + String.fromCharCode(78 + n) // n is 2 in this example, can even hard-code it

似乎工作正常并且给了我NaP,我的代码中的其他内容却给了我Na̎

这是正在执行的代码块

if (ifTypes(a, b, 'integer', 'NaN')) { // disregard this, inside code IS executing
    console.log("a: " + JSON.stringify(a) + "   b: " + JSON.stringify(b));
    var n = a[1] === 'NaN' ? b[0] : a[0];
    var output = 'Na' + String.fromCharCode(78 + n);
    console.log("output: " + output);
    return output;
}

从控制台进行验证:

a: [null,"NaN"]   b: ["2","integer"]
output: Na̎ // <-- SO's code highlighter is messing that up

是的,如果有人认出我在做什么,我就是ByteIO。如果你想看到这个代码在运行并且可能尝试通读我的控制台输出,我已经得到它implementing the interpreter from xkcd's 1537。只需点击较轻的栏并按Enter键,它就是模拟终端。

我怀疑问题是一些奇怪的ascii / unicode切换。我已经尝试将'Na'放在String.fromCharCode内,但它会得到类似的结果。虽然a应为[NaN, "NaN"],但我不认为这是问题所在。我也需要追踪那个错误。

2 个答案:

答案 0 :(得分:2)

我认为问题在于您正在添加"2"78,而不是278

&#13;
&#13;
function print(s) {
  document.querySelector("#result").innerHTML += "<pre>" + s + "</pre>";
}

var a = [null, "NaN"];
var b = ["2", "integer"];

var n = a[1] === 'NaN' ? b[0] : a[0];
var output = 'Na' + String.fromCharCode(78 + n);
print("output 1: " + output);

output = 'Na' + String.fromCharCode(78 + (typeof n == "number" ? n : parseInt(n, 10)));
print("output 2: " + output);
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

var output = 'Na' + String.fromCharCode(78 + n); 是一个字符串,不是整数,所以添加不是你想要的。

更改

var output = 'Na' + String.fromCharCode(78 + parseInt(n));

{{1}}