处理接受所有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();
}
在解析上面的十六进制字符串时抛出错误,给出了解析异常。 建议我解决方案
答案 0 :(得分:1)
Javascript适用于16位unicode字符,因此charCodeAt
可能会返回0到65535之间的任何数字。当您将其编码为十六进制时,您将获得1到4个字符的字符串,如果您只是连接它们,那么& #39;对方无法找出已编码的字符。
您可以通过在编码字符串中添加分隔符来解决此问题:
function encode(string) {
return string.split("").map(function(c) {
return c.charCodeAt(0).toString(16);
}).join('-');
}
alert(encode('größe Εγκυκλοπαίδεια 维'))
&#13;