gpt4 book ai didi

java - 字符串十六进制编码和解码

转载 作者:行者123 更新时间:2023-11-29 06:32:29 25 4
gpt4 key购买 nike

我正在将字符串从 UTF-8 转换为 CP1047,然后对其执行十六进制编码,效果很好。接下来我要做的是转换回来,使用解码十六进制字符串并以 UTF-8 格式在控制台上显示它。问题是我没有得到传递给编码方法的正确字符串。下面是我编写的一段代码:

public class HexEncodeDecode {

public static void main(String[] args) throws UnsupportedEncodingException,
DecoderException {
String reqMsg = "ISO0150000150800C220000080000000040000050000000215102190000000014041615141800001427690161 0B0 000123450041234";
char[] hexed = getHex(reqMsg, "UTF-8", "Cp1047");

System.out.println(hexed);

System.out.println(getString(hexed));
}

public static char[] getHex(String source, String inputCharacterCoding,
String outputCharacterCoding) throws UnsupportedEncodingException {
return Hex.encodeHex(new String(source.getBytes(inputCharacterCoding),
outputCharacterCoding).getBytes(), false);
}

public static String getString(char[] source) throws DecoderException,
UnsupportedEncodingException {
return new String(Hex.decodeHex(source), Charset.forName("UTF-8"));
}
}

我得到的输出是:

    C3B1C3AB7CC290C291C295C290C290C290C290C291C295C290C298C290C290C3A41616C290C290C290C290C290C298C290C290C290C290C290C290C290C290C294C290C290C290C290C290C295C290C290C290C290C290C290C29016C291C295C291C29016C291C299C290C290C290C290C290C290C290C290C291C294C290C294C291C296C291C295C291C294C291C298C290C290C290C290C291C2941604C296C299C290C291C296C291C280C290C3A2C290C280C280C280C280C290C290C290C29116C293C294C295C290C290C294C29116C293C294
ñë|äâ

因此,在打印输入字符串时需要帮助。

预期输出为:

C3B1C3AB7CC290C291C295C290C290C290C290C291C295C290C298C290C290C3A41616C290C290C290C290C290C298C290C290C290C290C290C290C290C290C294C290C290C290C290C290C295C290C290C290C290C290C290C29016C291C295C291C29016C291C299C290C290C290C290C290C290C290C290C291C294C290C294C291C296C291C295C291C294C291C298C290C290C290C290C291C2941604C296C299C290C291C296C291C280C290C3A2C290C280C280C280C280C290C290C290C29116C293C294C295C290C290C294C29116C293C294
ISO0150000150800C220000080000000040000050000000215102190000000014041615141800001427690161 0B0 000123450041234

最佳答案

new String(source.getBytes(inputCharacterCoding), outputCharacterCoding)
.getBytes()

这可能与您认为的不同。

首先要注意的是:String 没有编码。跟着我重复:String 没有编码

String 只是一系列旨在表示字符的标记。为此,Java 使用了 char 序列。它们也可以是信鸽。

UTF8、CP1047等只是字符编码;可以执行两个操作:

  • 编码:将信鸽流(chars)转换为字节流;
  • 解码:将字节流转换为信鸽流(chars)。

基本上,您的基本假设是错误的;您不能将编码与 String 相关联。您的实际输入应该是 byte 流(通常是字节数组),您知道它是特定编码(在您的情况下为 UTF-8)的结果,你想使用另一个字符集(在你的例子中是 CP1047)重新编码。

这里真正答案的“ secret ”是您的 Hex.encodeHex() 方法的代码,但您没有显示它,所以这是我可以召集的一个很好的答案.

关于java - 字符串十六进制编码和解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29675470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com