星期三, 6月 01, 2011

[Java] Fake UTF-16

static public String CoverterUtf8ToFakeUtf16(String utf8String) throws UnsupportedEncodingException {
    
    byte[] inputBytes = utf8String.getBytes("UTF-8");
    printBytes(inputBytes,"input bytes:");
    
    ArrayList list = new ArrayList();
    //convert input bytes to utf-16
    for(int i=0;i<inputBytes.length;i++){
     list.add(new Byte("00"));
     list.add(inputBytes[i]);
    }
    
    byte[] returnByte = new  byte[list.size()];
    for(int i=0;i<returnByte.length;i++){
     returnByte[i] = (Byte)list.get(i);
    }
    
    returnByte = new String(returnByte, Charset.forName("UTF-16")).getBytes("UTF-8");
    printBytes(returnByte,"return bytes:");
    
    String fakeUtf16 = new String(returnByte,Charset.forName("UTF-8"));
    printBytes(fakeUtf16.getBytes("UTF-8"),"fakeUtf16 bytes:");
    
    return fakeUtf16;
   }

Testing
public void fakeUtf16(InputStream requestBodyStream ) throws UnsupportedEncodingException {
String requestBODY = RequestBODY.get(requestBodyStream,Charset.forName("utf-8"));
System.out.println("requestBODY:" + requestBODY);
String fakeUtf16 = UnicodeFormatter.CoverterUtf8ToFakeUtf16(requestBODY);
System.out.println("fakeUtf16:" + fakeUtf16);
}
Console 輸出訊息
--fakeUtf16--
charset:UTF-8
requestBODY:中
input bytes:[0] = 0xe4
input bytes:[1] = 0xb8
input bytes:[2] = 0xad
return bytes:[0] = 0xc3
return bytes:[1] = 0xa4
return bytes:[2] = 0xc2
return bytes:[3] = 0xb8
return bytes:[4] = 0xc2
return bytes:[5] = 0xad
fakeUtf16 bytes:[0] = 0xc3
fakeUtf16 bytes:[1] = 0xa4
fakeUtf16 bytes:[2] = 0xc2
fakeUtf16 bytes:[3] = 0xb8
fakeUtf16 bytes:[4] = 0xc2
fakeUtf16 bytes:[5] = 0xad
fakeUtf16:中
fakeUtf16:[0] = 0xfe
fakeUtf16:[1] = 0xff
fakeUtf16:[2] = 0x00
fakeUtf16:[3] = 0xe4
fakeUtf16:[4] = 0x00
fakeUtf16:[5] = 0xb8
fakeUtf16:[6] = 0x00
fakeUtf16:[7] = 0xad
--/fakeUtf16--

沒有留言:

張貼留言

留個話吧:)