2017-07-24 4 views
0

Je suis en train de coder la chaîne en Java en utilisant la méthode suivante,UTF-16 chaîne d'encodage de caractères chinois en Java

String s = "子"; 
byte[] bytesEncoded = Base64.encodeBase64(s.getBytes("UTF-16")); 
String stringEncoded = new String(bytesEncoded); 

Quand je lance ce code dans Eclipse Je reçois valeur/v9bUA ==

Mais certains convertisseur UTF 16 en ligne donnant des valeurs comme 4E02

Tout le monde sait comment convertir les caractères chinois en UTF 16.

J'ai déjà traversé la plupart des questions stackoverflow toujours pas eu de réponses.

Merci à l'avance!

+0

Je pense que vous devez ajouter ISO8859-1 à votre chaîne comme: String = string1 new String (codage1, "ISO8859-1"); –

+0

On dirait que le convertisseur a un bug ou que vous en abusez. Si vous ne partagez pas * quel * convertisseur que vous avez utilisé, il est assez difficile pour quiconque de reproduire vos résultats, ne pensez-vous pas? – dimo414

+1

Aussi '4E02' ressemble à un hexagone, pas à Base64. Pourquoi utilisez-vous Base64 pour encoder la chaîne Java? – dimo414

Répondre

1

Cela fonctionne très bien.

Vous avez juste besoin de convertir bytecode dans la représentation hexagonale,

String encodeAsUcs2(String messageContent) throws UnsupportedEncodingException { 
    byte[] bytes = messageContent.getBytes("UTF-16BE"); 

    StringBuilder sb = new StringBuilder(); 
    for (byte b : bytes) { 
    sb.append(String.format("%02X", b)); 
    } 

    return sb.toString(); 
} 
1

Le code

String s = "子"; 
byte[] utf16encodedBytes = s.getBytes("UTF-16") 

vous donnera la chaîne codée comme uft16 octets.

Je pense que ce qui vous est source de confusion ici que vous êtes alors encodage base64 qui donne à ces octets en ASCII comme /v9bUA ==. Le numéro 4E02 est un codage Hex. Pour voir l'encodage Hex pour votre exemple, vous pouvez essayer:

String hexEncodedString = DatatypeConverter.printHexBinary(utf16encodedBytes);