2009-10-19 5 views
1

J'ai une chaîne Java que j'ai du mal à manipuler. J'ai un String, s, qui a une valeur de 丞 (un caractère chinois que j'ai choisi au hasard, je ne parle pas le chinois). Si j'appelleJava Internationalisation

String t = new String(s.getBytes()); 
if (s.equals(t)) 
    System.out.println("String unchanged"); 
else 
    System.out.println("String changed"); 

Ensuite, j'obtiens le résultat modifié de la chaîne. Est-ce que quelqu'un sait ce qui se passe?

Répondre

2

En fait, je compris cela, désolé pour le poste. J'utilisais le jeu de caractères Java par défaut, au lieu de le lancer explicitement en tant que jeu de caractères UTF-8. Ça fonctionne maintenant.

6

Parce que that method:

Encode cette chaîne dans une séquence d'octets en utilisant la valeur par défaut de la plate-forme charset

Si votre charset par défaut est-à-dire US-ASCII vous ne serez pas le même octets utilisés par cette lettre chinoise

J'imagine qu'un bit/octet supplémentaire peut être ajouté/déposé dans t Le processus. méthode

Essayez d'utiliser getBytes(String charSetName)

public byte[] getBytes(String charsetName) 

En utilisant les bonnes charsetName

2

Les getBytes() utilise l'encodage par défaut. Selon les documents:

La classe CharsetEncoder doit être utilisée lorsque plus de contrôle sur le processus de codage est requis.

1

Chaîne t = new Chaîne (s.getBytes()); peut créer une chaîne en utilisant ASCII comme charset par défaut. Utiliser la méthode suivante pour créer la chaîne avec charsetName comme UTF-8

String (byte [] octets, int offset, int longueur, String charsetName)