it-swarm.com.de

char-Wert in Java erhalten

Wie kann ich den UTF8-Code eines Zeichens in Java erhalten? Ich habe das Zeichen 'a' und ich möchte den Wert 97 Ich habe das Zeichen 'é' und ich möchte den Wert 233

hier ist eine Tabelle für mehr Werte

Ich habe Character.getNumericValue(a) ausprobiert, aber für a gibt es 10 und nicht 97, eine Idee, warum?

Dies scheint sehr einfach zu sein, aber jede Hilfe wäre dankbar!

12
Nick

char ist eigentlich ein numerischer Typ mit dem Unicode-Wert (UTF-16, um genau zu sein - Sie benötigen two chars, um Zeichen außerhalb des BMP darzustellen) des Zeichens. Sie können damit alles machen, was Sie mit einer int machen können.

Character.getNumericValue() versucht, das Zeichen als Ziffer zu interpretieren.

9

Sie können dafür die Methode codePointAt (int index) von Java.lang.String verwenden. Hier ist ein Beispiel:

"a".codePointAt(0) --> 97
"é".codePointAt(0) --> 233

Wenn Sie das Erstellen von Strings nicht unnötig vermeiden möchten, funktionieren die folgenden ebenfalls und können für Zeichenarrays verwendet werden:

Character.codePointAt(new char[] {'a'},0)
9
Kaitsu

Diese "UTF-8" -Codes sind nicht so. Es handelt sich eigentlich nur um Unicode-Werte gemäß den Unicode-Codediagrammen .

Ein "é" ist also eigentlich U + 00E9 - in UTF-8 würde es durch zwei Bytes {0xc3, 0xa9} dargestellt werden.

Um nun den Unicode-Wert zu erhalten - genauer gesagt den UTF-16-Wert, wie dies Java intern verwendet - müssen Sie den Wert nur in eine Ganzzahl konvertieren:

char c = '\u00e9'; // c is now e-acute
int i = c; // i is now 233
5
Jon Skeet

Dies führt zu einem guten Ergebnis:

int a = 'a';
System.out.println(a); // outputs 97

Gleichfalls:

System.out.println((int)'é');

druckt 233 aus.

4
Robertas

Meine Methode dazu ist ungefähr so:

char c = 'c';
int i = Character.codePointAt(String.valueOf(c), 0);
// testing
System.out.println(String.format("%c -> %d", c, i)); // c -> 99
2

Ihre Frage ist unklar. Möchten Sie den Unicode-Codepunkt für ein bestimmtes Zeichen (dies ist das von Ihnen angegebene Beispiel), oder möchten Sie einen Unicode-Codepunkt in eine UTF-8-Bytefolge konvertieren?

Wenn erstere, dann empfehle ich die Codetabellen unter http://www.unicode.org/

Wenn letzteres, dann wird das folgende Programm es tun:

public class Foo
{
   public static void main(String[] argv)
   throws Exception
   {
      char c = '\u00E9';
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      OutputStreamWriter out = new OutputStreamWriter(bos, "UTF-8");
      out.write(c);
      out.flush();
      byte[] bytes = bos.toByteArray();
      for (int ii = 0 ; ii < bytes.length ; ii++)
         System.out.println(bytes[ii] & 0xFF);
   }
}

(Es gibt auch eine Online-Unicode-zu-UTF8-Seite, aber ich habe keine URL auf diesem Rechner.)

1
Anon

Es gibt eine Open-Source-Bibliothek MgntUtils mit der Utility-Klasse StringUnicodeEncoderDecoder. Diese Klasse stellt statische Methoden bereit, die jeden String in eine Unicode-Sequenz umwandeln. Sehr einfach und nützlich. So konvertieren Sie String:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);

Zum Beispiel wird ein String "Hello World" in konvertiert

"\ u0048\u0065\u006c\u006c\u006f\u0020 \u0057\u006f\u0072\u006c\u0064"

Es funktioniert mit jeder Sprache. Hier ist der Link zum Artikel, in dem alle Informationen zur Bibliothek erläutert werden: MgntUtils . Suchen Sie nach dem Untertitel "String Unicode Converter". Der Artikel enthält einen Link zu Maven Central, wo Sie Artefakte und Github erhalten können, wo Sie das Projekt selbst erhalten können. Die Bibliothek wird mit gut geschriebenem Javadoc und Quellcode geliefert.

0
Michael Gantman

Sie können eine einfache Schleife erstellen, um alle verfügbaren UTF-8-Zeichen wie folgt aufzulisten:

public class UTF8Characters {
    public static void main(String[] args) {
        for (int i = 12; i <= 999; i++) {
            System.out.println(i +" - "+ (char)i);
        }
    }
}
0
ConnelBLAZE