Überprüfung des UTF-8-Datentyps 3-Byte- oder 4-Byte-Unicode

7

In meiner Datenbank bekomme ich den Fehler

%Vor%

Ich benutze Java und MySQL 5. Wie ich weiß, 4-Byte-Unicode ist legal i Java, aber illegal in MySQL 5, denke ich, dass es mein Problem verursachen kann und ich möchte den Typ meiner Daten überprüfen, also hier ist meine Frage : Wie kann ich überprüfen, dass meine UTF-8-Daten 3-Byte- oder 4-Byte-Unicode sind?

    
akuzma 20.02.2013, 13:31
quelle

3 Antworten

15

UTF-8 codiert alles in der mehrsprachigen Grundebene (dh U + 0000 bis U + FFFF inklusive) in 1-3 Bytes. Daher müssen Sie nur überprüfen, ob alles in Ihrer Zeichenfolge in der BMP ist.

In Java bedeutet dies, dass überprüft wird, ob char (eine UTF-16-Codeeinheit) ein hohes oder niedriges Ersatzzeichen ist, da Java Ersatzzeichenpaare verwendet, um Nicht-BMP-Zeichen zu codieren:

%Vor%     
Jon Skeet 20.02.2013, 13:37
quelle
10

Wenn Sie BMP nicht unterstützen möchten, können Sie diese Zeichen einfach entfernen, bevor Sie sie an MySQL übergeben:

%Vor%

Wenn Sie über BMP hinaus unterstützen möchten, brauchen Sie MySQL 5.5+ und Sie müssen alles ändern, das utf8 ist zu utf8mb4 (Kollatierungen, Zeichensätze ...). Aber Sie brauchen auch die Unterstützung dafür in dem Treiber, der ich bin nicht vertraut mit. Die Handhabung dieser Zeichen in Java ist ebenfalls ein Problem, da sie auf 2% verteilt sind. Co_de% und benötigen daher spezielle Handhabung in vielen Operationen.

    
Esailija 20.02.2013 15:29
quelle
3

Der beste Ansatz zum Entfernen von Nicht-BMP-Zeichen in Java, den ich gefunden gefunden habe, ist der folgende:

%Vor%     
verglor 18.11.2013 04:39
quelle