将UTF-8代码(例如,E052E472E04F)转换为文本

时间:2016-04-22 02:44:22

标签: java android utf-8

我正在使用我在网上找到的一些资源,其中包含UTF-8代码而不是真实文本(因为它是阿拉伯语),我根本不知道如何将其转换为真实文本在Java。

例如:

  

breakme〜E052E472E04FE46CE04EE051E46F0020E027E04BE43EE052E484E04EE4370020E052E027E47EE04FE478E050E473E412E04EE4630020E052E472E04FE46CE050E051E421E04EE051E0310020E476E050E4730020E050E051E466E04EE434E052E46FE41EE050E4210020E04FE044E47EE04FE443E04EE051E43EE46FE0270020E04FE472E04FE46BE021E41EE04EE42F0020E052E43AE04EE4670020E04FE033E41EE04EE051E478E46FE0270020E41EE04EE47CE04FE051E483E04EE0230020E41EE04EE483breakme

谢谢。

编辑:

我反向设计了源代码,这就是我发现的内容:

public char[] getUnicodeString(String paramString) {
    int j = paramString.length() / 4;
    char[] arrayOfChar = new char[j];
    int i = 0;
    for (; ; ) {
        if (i >= j) {
            return arrayOfChar;
        }
        arrayOfChar[i] = ((char) Integer.parseInt(paramString.substring(i * 4, i * 4 + 4), 16));
        i += 1;
    }
}

那会有帮助吗?

1 个答案:

答案 0 :(得分:1)

不是UTF-8 。 UTF-8是一种编码,其中字节在00-7F范围内是单个的,或者是C0-FF范围内的第一个字节的倍数,后面是80-BF范围内的1到3个字节。显示的序列与该模式不匹配,因此不能是UTF-8。

它似乎是一个2字节的编码,带有一些0020值,看起来像是unicode空格字符。如果你在0020空格后显示分开的2字节十六进制代码和断行,那么你会得到一个人类可读的序列:

E052 E472 E04F E46C E04E E051 E46F 0020
E027 E04B E43E E052 E484 E04E E437 0020
E052 E027 E47E E04F E478 E050 E473 E412 E04E E463 0020
E052 E472 E04F E46C E050 E051 E421 E04E E051 E031 0020
E476 E050 E473 0020
E050 E051 E466 E04E E434 E052 E46F E41E E050 E421 0020
E04F E044 E47E E04F E443 E04E E051 E43E E46F E027 0020
E04F E472 E04F E46B E021 E41E E04E E42F 0020
E052 E43A E04E E467 0020
E04F E033 E41E E04E E051 E478 E46F E027 0020
E41E E04E E47C E04F E051 E483 E04E E023 0020
E41E E04E E483

因此,虽然0020似乎是一个空格,但其余值为Exxx,整个E000-F8FF范围在unicode中定义为“私人使用”。

所以,不知道它是什么,但它不是UTF-8或UTF-16编码的unicode。

我想这可能是一些旧的DBCS(双字节字符集)代码页。