在java中获取char值

时间:2010-12-01 21:22:09

标签: java character-encoding

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

这是more values

的表格

我试过Character.getNumericValue(a)但是它给了我10而不是97,知道为什么?

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

8 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:10)

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

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

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

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

答案 2 :(得分:5)

那些“UTF-8”代码不是这样的。根据{{​​3}},它们实际上只是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

答案 3 :(得分:4)

这会产生良好的结果:

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

同样地:

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

打印出233

答案 4 :(得分:2)

我的方法就是这样:

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

答案 5 :(得分:1)

你的问题不清楚。您是否需要特定字符的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)

答案 6 :(得分:1)

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

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

答案 7 :(得分:0)

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

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);

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

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

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