问题解码特定的字符集

时间:2010-09-06 05:40:30

标签: java character-encoding

我正在尝试解码一个字符并获取相同的字符。 以下是我的简单测试。 我很困惑,如果我必须编码或解码。试过两个。两者都打印相同的结果。

任何建议都非常有用。

char inpData = '†';
String str = Character.toString((char) inpData);
byte b[] = str.getBytes(Charset.forName("MacRoman"));
System.out.println(b[0]); // prints -96

String decData = Integer.toString(b[0]);
CharsetDecoder decoder = Charset.forName("MacRoman").newDecoder();
ByteBuffer inBuffer = ByteBuffer.wrap(decData.getBytes());
CharBuffer result = decoder.decode(inBuffer);
System.out.println(result.toString()); // prints -96, expecting to print †

CharsetEncoder encoder = Charset.forName("MacRoman").newEncoder();
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(decData));
result = decoder.decode(bbuf);
System.out.println(result.toString());// prints -96, expecting to print †

谢谢。

2 个答案:

答案 0 :(得分:1)

执行String decData = Integer.toString(b[0]);时,创建字符串“-96”,这是您正在编码/解码的字符串。不是原始的字符。

您必须先将字符串更改回一个字节。


要让你的角色从-96恢复为你的角色,你必须这样做:

    String string = new String(b, "MacRoman");
    char specialChar = string.charAt(0);

通过此操作,您可以从char - >中撤消第一次转换。 String - > byte[0]byte[0] - > String - > char[0]


如果您有字符串“-96”,则必须首先将字符串更改为包含以下内容的字节:

byte b = Byte.parseByte("-96");

答案 1 :(得分:0)

String decData = Integer.toString(b[0]);

这可能会在最后两个示例中为您提供“-96”输出。尝试

String decData = new String(b, "MacRoman");

除此之外,请记住System.out.println使用你的system-charset来打印出字符串。为了更好的测试,可以考虑使用特定的字符集将字符串写入文件,例如

FileOutputStream fos = new FileOutputStream("test.txt"); 
OutputStreamWriter writer = new OutputStreamWriter(fos, "MacRoman");
writer.write(result.toString());
writer.close();