2015-05-03 20 views
0

如何在java中將字符串轉換爲UTF-16?如何將字符串轉換爲UTF-16

我正在轉換下面objc代碼的Java,但Java代碼不給我相同的結果,因爲這代碼

NSData *inputData = [pm dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; 
    NSString *encodedString = [inputData base64EncodedString]; 
    pm = [IFunctions replaceString:encodedString replaceChar:@"=" replaceWithChar:@"-"]; 

Java代碼

String s_decoded = new String(pm.getBytes(), "UTF-16LE"); 
pm = Base64.encode(s_decoded.getBytes()).toString().replace("=", "-"); 

回答

5

的無參數的getBytes()方法使用平臺默認編碼,這可能不是UTF-16LE。嘗試getBytes("UTF-16LE")

0

請參閱此代碼並修改您的代碼。

public class UseTheForce { 
     public static void main(final String[] args) 
      throws java.io.UnsupportedEncodingException { 
      for (final byte b : args[0].getBytes(args[1])) { 
       System.out.printf("%1$02X ", (b & 0xFF)); 
      } 
      System.out.println(); 
     } 
    } 
    Test 

    $ java UseTheForce luke US-ASCII 
    6C 75 6B 65 

    $ java UseTheForce luke UTF-8 
    6C 75 6B 65 

    $ java UseTheForce luke UTF-16 
    FE FF 00 6C 00 75 00 6B 00 65 

    $ java UseTheForce luke UTF-16BE 
    00 6C 00 75 00 6B 00 65 

    $ java UseTheForce luke UTF-16LE 
    6C 00 75 00 6B 00 65 00 

    $ java UseTheForce luke UTF-32 
    00 00 00 6C 00 00 00 75 00 00 00 6B 00 00 00 65 
1
byte[] bytesEncoded = Base64.encodeBase64(str.getBytes("UTF-16LE")); 
String stringEncoded = new String(bytesEncoded); 
0

您需要使用getBytes()方法並指定所需的字符集:

public static void main(String[] args) throws UnsupportedEncodingException { 
    char ch; 
    ch = 0x0001; 
    System.out.println(Arrays.toString((String.valueOf(ch)).getBytes(StandardCharsets.UTF_16LE))); 
    ch = 0x0111; 
    System.out.println(Arrays.toString((String.valueOf(ch)).getBytes(StandardCharsets.UTF_16LE))); 
    ch = 0x1111; 
    System.out.println(Arrays.toString((String.valueOf(ch)).getBytes(StandardCharsets.UTF_16LE))); 
} 

輸出:

[1, 0] 
[17, 1] 
[17, 17]