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

Encode/decode hex to utf-8 string

本文关键字:utf-8 字符串 十六进制 解码 编码      更新时间:2023-09-26

在接受所有 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();
    }

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

Javascript使用16位Unicode字符,因此charCodeAt可能会返回0到65535之间的任何数字。当你把它编码成十六进制时,你会得到从 1 到 4 个字符的字符串,如果你只是连接这些,对方就无法找出编码了哪些字符。

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

function encode(string) {
     return string.split("").map(function(c) {
        return c.charCodeAt(0).toString(16);
     }).join('-');
}
alert(encode('größe Εγκυκλοπαίδεια 维'))