如何使用 ISO-8859-6 字符集将十六进制代码编码为字符串?

我知道还有其他线程可以回答这个问题,但对我来说,它有点不同。

我有许多二进制文件,其中包含需要显示的不同类型的数据(ASCII、十六进制 ..)。

所以我通常显示 ASCII 值的方法是使用 StandardCharsets 类中包含的 ISO-8859-1。遗憾的是,它本身不支持 iso-8859.6 需要显示阿拉伯字符。 以下是我用于编码的方法:

第一种方法给我十六进制代码作为字符串:

public static String hexField(byte[] record,int offset,int length) {
     StringBuilder s = new StringBuilder(length * 2);
     int end = offset + length;

     for (int i = offset; i < end; i++) {
         int high_nibble = (record[i] & 0xf0) >>> 4;
         int low_nibble = (record[i] & 0x0f);
         s.append(hex_table[high_nibble]);
         s.append(hex_table[low_nibble]);
         
     }

     return s.toString();
}

第二种方法:使用前一种方法显示ASCII字段:

private static String asciiField(byte[] record,int length) throws UnsupportedEncodingException {
    String field = hexField(record,offset,length) ; 
    
    byte[] fieldByte = javax.xml.bind.DatatypeConverter.parseHexBinary(field);
    return new String(fieldByte,StandardCharsets.ISO_8859_1).trim() ;
}

如何显示iso-8859.6编码的阿拉伯字符谢谢!

zhangfanfootball 回答:如何使用 ISO-8859-6 字符集将十六进制代码编码为字符串?

虽然 Java SE 标准不要求支持 ISO-8859-6(因此在 StandardCharsets 中没有相应的常量),但我相信它是得到广泛支持。

要使用它,只需在需要字符集的地方使用字符串常量 "ISO-8859-6",例如将包含 ISO-8859-6 数据的 byte[] 转换为 String,只需使用

byte[] byteData = {(byte) 0xC2,(byte) 0xD4,(byte) 0xD8};
String s = new String(byteData,"ISO-8859-6");

这在我的机器上运行得很好。 (该示例中的 byteData 几乎肯定包含胡言乱语,因为我不会任何阿拉伯语,但它确实代表了 ISO-8859-6 中的一些阿拉伯字符。

或者,如果您想要一个实际的 Charset.forName("ISO-8859-6") 对象,您可以使用 Charset。这样做也会将 UnsupportedEncodingException 移动到调用 Charset.forName 的位置,并且不会在每个 byte[]-to-String 转换位置乱扔该异常。

另请注意,hexField 似乎与 parseHexBinary 完全相反,因此这两个方法像这样链接在一起是毫无意义的 byte[]-> 十六进制表示->{{1} } 转换链。甚至还有一个 byte[] 构造函数,它采用您可以使用的偏移量和长度:

String
本文链接:https://www.f2er.com/20347.html

大家都在问