开发者

Issue Decoding for a specific charset

开发者 https://www.devze.com 2023-01-15 03:25 出处:网络
I\'m trying to decode a char and get back the same char. Following is my simple test. I\'m confused, If i have to encode or decode. Tried both. Both print the same result.

I'm trying to decode a char and get back the same char. Following is my simple test. I'm confused, If i have to encode or decode. Tried both. Both print the same result.

Any suggestions are greatly helpful.

char inpData = '†';
String str = Character.toString((char) inpData开发者_如何学C);
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 †

Thank you.


When you do String decData = Integer.toString(b[0]);, you create the string "-96" and that is the string you're encoding/decoding. Not the original char.

You have to change your String back to a byte before.


To get your character back as a char from the -96 you have to do this :

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

With this your reversing your first transformation from char -> String -> byte[0] by doing byte[0] -> String -> char[0]


If you have the String "-96", you must change first your string into a byte with :

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


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

This probably gets you the "-96" output in the last two examples. try

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

Apart from that, keep in mind that System.out.println uses your system-charset to print out strings anyway. For a better test, consider writing your Strings to a file using your specific charset with something like

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

精彩评论

暂无评论...
验证码 换一张
取 消