gpt4 book ai didi

java - 在java中使用构建模式显示UTF8字符串时出错

转载 作者:行者123 更新时间:2023-12-01 14:04:45 26 4
gpt4 key购买 nike

我有一个从 UTF8 字符串转换而来的十六进制字符串 (sA)。当我将十六进制字符串 sA 转换为 UTF8 字符串时,我无法在构建模式(运行文件 .jar)的表单 UI 中显示它,但是当我以运行模式或 Debug模式运行时,UTF8 字符串可以在表单 UI 中显示。我使用netbeans IDE 7.3.1。我的代码如下:

public String hexToString(String txtInHex) {
byte[] txtInByte = new byte[txtInHex.length() / 2];
int j = 0;
for (int i = 0; i < txtInHex.length(); i += 2) {
txtInByte[j++] = Byte.parseByte(txtInHex.substring(i, i + 2), 16);
}
return new String(txtInByte);
}

private String asHex(byte[] buf) {
char[] chars = new char[2 * buf.length];
for (int i = 0; i < buf.length; ++i) {
chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
chars[2 * i + 1] = HEX_CHARS[buf[i] & 0x0F];
}
return new String(chars);
}

最佳答案

此代码存在多个问题。

字节值的有效范围是 -128 到 127,或者十六进制的 -807F,并且 Byte.parseByte 强制执行此范围。如果您的 asHex 方法必须处理第二个字节大于 127 的字符,它将生成一个无法由 toHexString 解码的字符串。

asHex 方法仅处理输入字符的第二个字节,因此它仅对前 256 个 Unicode 字符正确工作,并对其余字符产生虚假输出。

toHexString 方法从字节数组中解码字符串,假设采用某种特定于平台的默认编码,如果数据假定以 UTF-8 编码,而默认编码是其他编码,则会给出不正确的结果.

为什么您要尝试创建自己的方法来编码和解码十六进制字符串,而不是使用众所周知且经过测试的库?

关于java - 在java中使用构建模式显示UTF8字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18996108/

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