在java中获取char值

如何在Java中获取char的UTF8代码? 我有char’a’,我想要值97我有char’é’,我想要值233

这是一个更多值的表

我尝试过Character.getNumericValue(a)但是它给了我10而不是97,任何想法为什么?

这似乎非常基本,但任何帮助将不胜感激!

char实际上是一个数字类型,包含unicode值(UTF-16,确切地说 – 你需要两个 char来表示BMP之外的字符)。 您可以使用int执行所有操作。

Character.getNumericValue()尝试将字符解释为数字。

您可以使用java.lang.String的codePointAt(int index)方法。 这是一个例子:

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

如果您想避免不必要地创建字符串,以下工作也可以用于char数组:

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

那些“UTF-8”代码不是这样的。 根据Unicode代码图表 ,它们实际上只是Unicode值。

因此’é’实际上是U + 00E9 – 在UTF-8中它将由两个字节{0xc3,0xa9}表示。

现在要获取Unicode值 – 或者更准确地说UTF-16值,就像Java在内部使用的那样 – 您只需要将值转换为整数:

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

这产生了良好的结果:

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

同样:

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

打印出233

我的方法是这样的:

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

你的问题不清楚。 您是否需要特定字符的Unicode代码点(这是您给出的示例),或者您是否要将Unicode代码点转换为UTF-8字节序列?

如果是前者,那么我推荐代码图表http://www.unicode.org/

如果是后者,则以下程序将执行此操作:

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

(还有一个在线Unicode到UTF8页面,但我没有这台机器上的URL)

有一个开源库MgntUtils,它有一个Utility类StringUnicodeEncoderDecoder。 该类提供静态方法,将任何String转换为Unicode序列,反之亦然。 非常简单实用。 要转换String,您只需:

 String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString); 

例如,字符串“Hello World”将被转换为

“\ u0048 \ u0065 \ u006c \ u006c \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006 \ u006

它适用于任何语言。 以下是解释有关库的所有技术的文章的链接: MgntUtils 。 查找副标题“String Unicode converter”。 本文为您提供了Maven Central的链接,您可以在其中获取工件和github,您可以在其中获得项目本身。 该库附带编写良好的javadoc和源代码。

您可以创建一个简单的循环来列出所有可用的UTF-8字符,如下所示:

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