获取java中的char值

获取java中的char值,java,character-encoding,Java,Character Encoding,如何在Java中获取字符的UTF8代码? 我有字符'a',我想要值97 我有字符“é”,我想要值233 这是我的桌子 我尝试了Character.getNumericValue(a),但对于a,它给了我10而不是97,你知道为什么吗 这似乎很基本,但任何帮助都将不胜感激 这会产生良好的结果: int a = 'a'; System.out.println(a); // outputs 97 同样地: System.out.println((int)'é'); 打印出233 请注意,第一个示例

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

这是我的桌子

我尝试了
Character.getNumericValue(a)
,但对于a,它给了我10而不是97,你知道为什么吗


这似乎很基本,但任何帮助都将不胜感激

这会产生良好的结果:

int a = 'a';
System.out.println(a); // outputs 97
同样地:

System.out.println((int)'é');
打印出
233

请注意,第一个示例仅适用于标准和扩展ASCII字符集中包含的字符。第二种方法适用于所有Unicode字符。将字符乘以1可以获得相同的结果。
System.out.println(1*‘é’)

char
实际上是一种数字类型,包含字符的unicode值(确切地说是UTF-16,您需要两个
char
s来表示BMP之外的字符)。你可以用它做任何你可以用
int
做的事情

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

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

所以一个“é”实际上是U+00E9——在UTF-8中,它将由两个字节{0xc3,0xa9}表示

现在,要获得Unicode值——或者更精确地说是UTF-16值,因为Java内部使用UTF-16值——只需将该值转换为整数:

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

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

如果是前者,那么我建议在

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

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);
   }
}
公共类Foo
{
公共静态void main(字符串[]argv)
抛出异常
{
字符c='\u00E9';
ByteArrayOutputStream bos=新建ByteArrayOutputStream();
OutputStreamWriter out=新的OutputStreamWriter(bos,“UTF-8”);
写出(c);
out.flush();
byte[]bytes=bos.toByteArray();
for(int ii=0;ii

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

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

"a".codePointAt(0) --> 97
"é".codePointAt(0) --> 233
如果要避免不必要地创建字符串,以下操作也可以使用,并可用于字符数组:

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

我的方法是这样的:

char c = 'c';
int i = Character.codePointAt(String.valueOf(c), 0);
// testing
System.out.println(String.format("%c -> %d", c, i)); // c -> 99
public class UTF8Characters {
    public static void main(String[] args) {
        for (int i = 12; i <= 999; i++) {
            System.out.println(i +" - "+ (char)i);
        }
    }
}

有一个开源库MgntUtils,它有一个实用程序类StringUnicodeDecoder。该类提供了将任何字符串转换为Unicode序列的静态方法,反之亦然。非常简单和有用。要转换字符串,只需执行以下操作:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);
例如,字符串“Hello World”将转换为

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


它适用于任何语言。以下是文章的链接,该文章解释了有关库的所有te DITAIL:。查找副标题“字符串Unicode转换器”。本文为您提供了到Maven Central的链接,在这里您可以获得工件,在github中您可以获得项目本身。该库附带了编写良好的javadoc和源代码。

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

char c = 'c';
int i = Character.codePointAt(String.valueOf(c), 0);
// testing
System.out.println(String.format("%c -> %d", c, i)); // c -> 99
public class UTF8Characters {
    public static void main(String[] args) {
        for (int i = 12; i <= 999; i++) {
            System.out.println(i +" - "+ (char)i);
        }
    }
}
公共类UTF8字符{
公共静态void main(字符串[]args){

对于(int i=12;i这与UTF-8()有什么关系?“é”在UTF-8中是
0xC3 0xA9
。我在这里结束是因为我不相信没有一个名为codePoint的方法可以使用单个字符:Character.codePoint('a')或非静态字符c.codePoint()