che sto cercando di dividere tutti i caratteri cinesi da una stringa, ma ho urtato una situazione strana per il personaggiocarattere singolo cinese determinato come lunghezza 2 in Java/Scala String
scala> ""
res1: String =
scala> res1.length
res2: Int = 2
scala> res1.getBytes
res3: Array[Byte] = Array(-16, -91, -111, -82)
scala> res1(0)
res4: Char = ?
scala> res1(1)
res5: Char = ?
Si tratta di un singolo carattere, ma Java/Scala lo determina come due caratteri sconosciuti. E di solito vedo il carattere cinese prendere tre byte in UTF-8, ma questo personaggio ne richiede quattro.
Quindi, non posso dividere una stringa e trovare questo singolo carattere. Ancora peggio, quando si utilizza myString.replaceAll("[^\\p{script=Han}]", "")
per escludere tutti i caratteri non cinesi, la seconda parte viene sostituita e diventa una stringa non valida.
C'è qualche soluzione a questo? Sto usando openjdk-8-jdk su Ubuntu.
Questo è chiamato un [coppia di surrogati] (http://www.ibm.com/developerworks/library/j-unicode /) (come puoi confermare con 'Character.isSurrogatePair (res1 (0), res1 (1))'). –