将十六进制编码/解码为utf-8字符串

时间:2015-01-22 10:50:42

标签: java javascript hex encode

处理接受所有UTF-8字符的Web应用程序,包括以下希腊字符,是我想要转换为十六进制的字符串。
以下是不同的语言字符串,这些字符串在我当前的代码中不起作用

ЫЙБПАРО Εγκυκλοπαίδεια éaös Größe Größe

以下是通过下面提到的javascript函数进行的十六进制转换

42b41941141f41042041e 3953b33ba3c53ba3bb3bf3c03b13af3b43b53b93b1 e961f673 4772c3192c2b6c3192c217865 4772f6df65

将上面的字符串转换为十六进制的Javascript函数

function encode(string) {
     var str= "";
        var length = string.length;        
        for (var i = 0; i < length; i++){
            str+= string.charCodeAt(i).toString(16);
            }
        return str;
}

这里没有给出转换的任何错误但是在java方面我无法解析使用以下java代码转换为十六进制的字符串

public String HexToString(String hex){

          StringBuilder finalString = new StringBuilder();
          StringBuilder tempString = new StringBuilder();

          for( int i=0; i<hex.length()-1; i+=2 ){                
              String output = hex.substring(i, (i + 2));             
              int decimal = Integer.parseInt(output, 16);            
              finalString.append((char)decimal);     
              tempString.append(decimal);
          }
        return finalString.toString();
    }

在解析上面的十六进制字符串时抛出错误,给出了解析异常。 建议我解决方案

1 个答案:

答案 0 :(得分:1)

Javascript适用于16位unicode字符,因此charCodeAt可能会返回0到65535之间的任何数字。当您将其编码为十六进制时,您将获得1到4个字符的字符串,如果您只是连接它们,那么& #39;对方无法找出已编码的字符。

您可以通过在编码字符串中添加分隔符来解决此问题:

&#13;
&#13;
function encode(string) {
     return string.split("").map(function(c) {
        return c.charCodeAt(0).toString(16);
     }).join('-');
}

alert(encode('größe Εγκυκλοπαίδεια 维'))
&#13;
&#13;
&#13;