La lecture des caractères chinois dans une chaîne de caractères à partir d'un tampon d'octets
J'ai donc un char tableau[] qui contient du texte et d'autres données.
Comment puis-je extraire le texte chinois de la char tableau []? Droit maintenant, je peux obtenir l'anglais bien avec
public String getString(int index, int length) {
String str = "";
for (int i = 0; i < length && this.data[index + i] != 0; i++)
str = str + this.data[index + i];
return str;
}
alors je vais essayer ceci:
try {
String charset = "GB18030";
String str = new String(m.target.getBytes("UTF-16"), "GB18030");
System.out.println(str);
System.out.println(str.equals("大家"));
} catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
m.la cible est une chaîne que j'ai reçu de l'byte[] tableau avec getString() ci-dessus. J'ai essayé les différents codages et les combinaisons d'entre eux et aucun d'entre eux pour afficher correctement le texte (大家) et aucun ne sera de retour vrai pour les str.equals("大家")
MODIFIER
À l'aide de cette méthode, je peux obtenir avec succès les caractères chinois.
public String test(int index, int length) {
byte[] t = new byte[this.data.length];
for (int i = 0; i < this.data.length; i++)
t[i] = (byte) this.data[i];
try {
return new String(t, index, length, "GB18030");
} catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
Mais ma question est maintenant.. je pensais que le max qu'un octet peut être était de 127? Comment le tableau d'octets tenir l'octet de poids fort caractères chinois? Je peux changer le tampon de byte[] au lieu de char[]?
"UTF-16"
et "GB18030"
? Pourquoi ne pas simplement faire: new String(this.data, offset, length, "UTF-16")
?J'ai malencontreusement dit que j'étais à l'aide d'un byte[] tableau pour cette.les données. C'est en fait un tableau de caractères. Si c'était un byte[] tableau ne serait-il pas de ne pas être en mesure de tenir le texte unicode? La plus haute valeur, un octet peut contenir est de 127?
Un
char[]
serait contiennent du texte en UTF-16 unités de code. Un byte[]
pourrait contenir du texte dans n'importe quel encodage comme encodages de texte ne sont rien de plus qu'un moyen de mappage de caractères nombre d'octets.OriginalL'auteur marcaddeo | 2012-01-15
Vous devez vous connecter pour publier un commentaire.
Les deux char et Chaîne en Java sont au format Unicode. Vous n'avez pas de soins sur ce, aussi longtemps que vous utilisez à l'intérieur du code Java. Vous spécifier le codage lors de la conversion vers/à partir de byte[] tableau ou en lecture/écriture à/à partir de IO flux.
De déclarer Chaîne de caractères contenant des caractères chinois, vous pouvez utiliser échappé séquences ou les inscrire dans le code, mais vous devez prendre soin puis sur le codage de fichier. UTF-8 format est quasi-standard de nos jours, il est pris en charge par l'IDE (comme Eclipse) et de construire des outils (maven, ant).
Si vous venez d'écrire
À lire les caractères chinois, par exemple, UTF-16 fichier encodé, vous utilisez InputStreamReader spécifier le codage est approprié, et vous pouvez les lire puis les cordes, f.e. avec l'aide de BufferedReader
OriginalL'auteur Danubian Sailor