我正在尝试解码一个字符并获取相同的字符。 以下是我的简单测试。 我很困惑,如果我必须编码或解码。试过两个。两者都打印相同的结果。
任何建议都非常有用。
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 †
谢谢。
答案 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();