有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Javascript与Java字符串编码

我正在尝试将以下内容从Java移植到JavaScript:

String key1 = "whatever";
String otherKey = "blah";
String key2;    
byte keyBytes[] = key1.getBytes();
for (int i = 0; i < keyBytes.length; i++) {
    keyBytes[i] ^= otherKey.charAt(i % otherKey.length());
}
key2 = new String(keyBytes);

以下是我写的:

var key1 = "whatever";
var other_key = "blah";
var key2 = "";
for (var i = 0; i < key1.length; ++i)
{
    var ch = key1.charCodeAt(i);
    ch ^= other_key.charAt(i % other_key.length);
    key2 += String.fromCharCode(ch);
}

然而,他们给出了不同的答案

问题是,JavaScript字符串的编码是否不同?我如何纠正它们


共 (1) 个答案

  1. # 1 楼答案

    您在代码中忘记了一个charCodeAt(),如下所示:

    var key1 = "whatever";
    var other_key = "blah";
    var key2 = "";
    for (var i = 0; i < key1.length; ++i)
    {
        var ch = key1.charCodeAt(i);
        ch ^= other_key.charAt(i % other_key.length).charCodeAt(0);
        key2 += String.fromCharCode(ch);
    }
    

    在java中,在执行^=

    我更改了代码,以查看java和javascript中的字节数组。运行后,结果相同:

    Javascript:

    function convert(){
        var key1 = "whatever";
        var other_key = "blah";
    
        var key2 = "";
        var byteArray = new Array();
    
        for (var i = 0; i < key1.length; ++i){
           var ch = key1.charCodeAt(i);
           ch ^= other_key.charAt(i % other_key.length).charCodeAt(0);
    
           byteArray.push(ch);
           key2 += String.fromCharCode(ch);
        }
    
        alert(byteArray);
    }
    

    结果:21,4,0,28,7,26,4,26


    Java:

    static void convert() {
        String key1 = "whatever";
        String otherKey = "blah";
        String key2;
        byte keyBytes[] = key1.getBytes();
        for (int i = 0; i < keyBytes.length; i++) {
            keyBytes[i] ^= otherKey.charAt(i % otherKey.length());
        }
        System.out.println(Arrays.toString(keyBytes));
        key2 = new String(keyBytes);
    }
    

    结果:[21,4,0,28,7,26,4,26]