char-waarde ophalen in java

Hoe kan ik de UTF8-code van een char in Java krijgen?
Ik heb de char ‘a’ en ik wil de waarde 97
Ik heb het teken ‘é’ en ik wil de waarde 233

hier is een tabel voor meer waarden

Ik heb Character.getNumericValue(a)geprobeerd, maar voor a krijg ik 10 en niet 97, enig idee waarom?

Dit lijkt erg eenvoudig, maar alle hulp wordt op prijs gesteld!


Antwoord 1, autoriteit 100%

charis eigenlijk een numeriek type dat de unicode-waarde bevat (UTF-16, om precies te zijn – je hebt tweechars nodig om tekens buiten de BMP) van het teken. Je kunt er alles mee doen wat je kunt doen met een int.

Character.getNumericValue()probeert het teken als een cijfer te interpreteren.


Antwoord 2, autoriteit 77%

Je kunt daarvoor de codePointAt(int index) methode van java.lang.String gebruiken. Hier is een voorbeeld:

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

Als u wilt voorkomen dat u onnodig strings maakt, werkt het volgende ook en kan het worden gebruikt voor char-arrays:

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

Antwoord 3, autoriteit 38%

Die “UTF-8”-codes zijn niet zoiets. Het zijn eigenlijk gewoon Unicode-waarden, volgens de Unicode-codediagrammen.

Dus een ‘é’ is eigenlijk U+00E9 – in UTF-8 zou het worden weergegeven door twee bytes { 0xc3, 0xa9 }.

Om nu de Unicode-waarde te krijgen – of om preciezer te zijn de UTF-16-waarde, want dat is wat Java intern gebruikt – hoeft u alleen maar de waarde om te zetten naar een geheel getal:

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

Antwoord 4, autoriteit 31%

Dit levert een goed resultaat op:

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

Evenzo:

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

print 233af.

Merk op dat het eerste voorbeeld alleen werkt voor tekens die zijn opgenomen in de standaard en uitgebreide ASCII-tekensets. De tweede werkt met alle Unicode-tekens. U kunt hetzelfde resultaat bereiken door de char met 1 te vermenigvuldigen.
System.out.println( 1 * ‘é’);


Antwoord 5, autoriteit 8%

Uw vraag is onduidelijk. Wilt u het Unicode-codepunt voor een bepaald teken (dat is het voorbeeld dat u gaf), of wilt u een Unicode-codepunt vertalen naar een UTF-8-bytereeks?

In het eerste geval raad ik de codetabellen aan op http://www.unicode.org/

Als het laatste het geval is, zal het volgende programma het doen:

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);
   }
}

(er is ook een online Unicode naar UTF8-pagina, maar ik heb de URL niet op deze machine)


Antwoord 6, Autoriteit 8%

Mijn methode om te doen, is zoiets:

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

Antwoord 7, Autoriteit 8%

U kunt een eenvoudige lus maken om alle beschikbare UTF-8-tekens beschikbaar te maken:

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

Antwoord 8

Er is een open source-bibliotheek MGNTutils met een Utility Class StringUnicODEencoderdecoder. Die klasse biedt statische methoden die elke reeks converteren in Unicode-sequentie VISE-VERSA. Heel eenvoudig en nuttig. Om string te converteren, doe je gewoon:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);

Een string “Hallo World” wordt bijvoorbeeld geconverteerd in

“\ u0048 \ u0065 \ u006c \ u006c \ u006F \ u0020
\ u0057 \ u006F \ u0072 \ u006c \ u0064 “

Het werkt met elke taal. Hier is de link naar het artikel waarin alle details over de bibliotheek worden uitgelegd: MgntUtils. Zoek naar de ondertitel “String Unicode-converter”. Het artikel geeft je een link naar Maven Central waar je artefacten en github kunt krijgen waar je het project zelf kunt krijgen. De bibliotheek wordt geleverd met goed geschreven javadoc en broncode.

Other episodes