Unterschied zwischen UTF-8 und UTF-16?
Unterschied zwischen UTF-8 und UTF-16?
Warum brauchen wir diese?
MessageDigest md = MessageDigest.getInstance("SHA-256");
String text = "This is some text";
md.update(text.getBytes("UTF-8")); //Change this to "UTF-16" if needed
byte[] digest = md.digest();
InformationsquelleAutor der Frage theJava | 2011-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, es gibt viele gute Artikel über diese rund um das Web, aber hier ist eine kurze Zusammenfassung.
Sowohl UTF-8 und UTF-16 sind die variable-Länge-Kodierungen. Aber in UTF-8 ein Charakter kann besetzen ein minimum von 8 bits, während in UTF-16 Zeichen Länge beginnt mit 16 bits.
Main UTF-8-Vorteile:
Main UTF-8 Nachteile:
Main UTF-16 Vorteile:
char
als die primitiven Bestandteil der Zeichenfolge.Main UTF-16-Nachteile:
Im Allgemeinen, UTF-16 ist in der Regel besser für die in-memory-Darstellung, da WERDEN/LE irrelevant ist (benutzen Sie einfach die native Reihenfolge) und die Indizierung ist schneller (nur nicht vergessen zu handhaben ersatzzeichenpaare richtig). UTF-8 ist, auf der anderen Seite, ist sehr gut für text-Dateien und Netzwerk-Protokolle, da es keine BE/LE Problem und null-Terminierung oft kommt in handliches, als auch als ASCII-Kompatibilität.
InformationsquelleAutor der Antwort Sergey Tachenov
Sind Sie einfach unterschiedliche Schemata für die Darstellung von Unicode-Zeichen.
Beide sind variable-length - UTF-16 verwendet 2 bytes für alle Zeichen der basic multilingual plane (BMP) enthält die meisten Zeichen im Allgemeinen Gebrauch.
UTF-8 verwendet, die zwischen 1 und 3 bytes für die Zeichen im BMP -, bis zu 4 Zeichen in der aktuellen Unicode-Bereich von U+0000 bis U+1FFFFF, und ist erweiterbar bis zu U+7FFFFFFF wenn das jemals nötig wird... aber vor allem alle ASCII-Zeichen dargestellt werden, in einem einzigen byte.
Für die Zwecke eines message digest ist es nicht egal, welche davon Sie wählen, so lange wie jeder, der versucht zu reproduzieren, ist das verdauen verwendet die gleiche option.
Sehen auf dieser Seite für mehr über UTF-8 und Unicode.
(Beachten Sie, dass alle Java-Zeichen werden UTF-16-code-Punkte innerhalb des BMP; zur Darstellung von Zeichen über U+FFFF müssen Sie die Verwendung von Surrogat-Paaren in Java.)
InformationsquelleAutor der Antwort Jon Skeet
Dies ist unabhängig von UTF-8/16 (im Allgemeinen, obwohl es konvertieren zu UTF16 und die BE/LE Teil kann eingestellt werden, w/eine Zeile), aber unten ist der Schnellste Weg, um konvertieren von String zu byte[]. Zum Beispiel: gute genau für den Fall vorgesehen (hash-code). String.getBytes(enc) ist relativ langsam.
InformationsquelleAutor der Antwort bestsss
Einfache Weise zu unterscheiden, UTF-8 und UTF-16 ist die Identifizierung von Gemeinsamkeiten zwischen Ihnen.
Andere als das teilen von gleichen unicode-Nummer für bestimmten Charakter, jede ist Ihr eigenes format.
InformationsquelleAutor der Antwort Venkateswara Rao