8
votes

Java: string.tocharray () avec des caractères unicode

Je sais que le caractère ne peut pas contenir de caractères unicode (comme Char c = '\ u1023'). Alors, comment j'irais faire

    String s = "ABCDEFG\u1023";
    char[] c = s.toCharArray();


1 commentaires

réellement. char c = '\ u1023' fonctionne pour moi


4 Réponses :


11
votes

Quiconque vous a dit que dans Java Char ne peut pas contenir de caractères Unicode, était faux :

Les valeurs des types intégraux sont des entiers dans les gammes suivantes:

  • pour char , à partir de '\ u0000' à '\ uffff' inclus, c'est-à-dire de 0 à 65535

1 commentaires

Oh merci. Ok qui trie beaucoup de problèmes. Je dois avoir pensé à autre chose. Je vais accepter cela comme la réponse dans quelques minutes. (Alors ne me laissez pas encore!)



5
votes

Trois choses:

  1. Un charmant le plus certainement peut avoir U1023.
  2. TOCHARARRAY () retournera un tableau de caractères de caractère qui est pratiquement identique à UTF16
  3. Depuis un char est 16 bits et que l'Unicode s'étend sur 21 bits, les personnages situés en dehors du BMP sont codés sous forme de deux caractères de substitution. Java 1.5 à partir d'API Pour cela, par exemple string.codepointat (...) . Si vous utilisez Java 1.4 ou plus tôt, examinez l'ICU4J.

0 commentaires

2
votes

en Java, un caractère est essentiellement un peu signé. Afin de parcourir une chaîne qui comporte des caractères Unicode en dehors de la plage soutenue par CHAR (le premier 65536), vous devez utiliser le motif suivant, qui stocke chaque code de code comme int. Int.

for (int i = 0; i < str.length();) {
    int ch = str.codePointAt(i);
    // do stuff with ch...
    i += Character.charCount(ch);
}


0 commentaires

2
votes

Java Char peut contenir Les caractères unicode les plus Les autres ont déjà mentionné, mais les personnages en dehors du plan multilingue de base (BMP) sont divisés en plusieurs char s et les manipulant De manière autonome peut casser la chaîne.

Pour être en sécurité, vous pouvez diviser la chaîne en matrice de chaîne: xxx

... ou utilisez émetteur , islowowurrogate et ishighsurrogate méthodes de caractère pour empêcher la modification de Ingle Char dans la paire: xxx


0 commentaires