找出小Tethe char的utf-8值

时间:2014-08-23 13:52:05

标签: java encoding utf-8

有一些令人困惑的事情,

我试图获取小Tetha字符的utf-8 int值,该值应为225182191: http://en.wikipedia.org/wiki/Theta#Character_Encodings 但是:

    public static void main(String... args){

    char c='Ɵ';
    System.out.println((byte)c);
}

版画:-97(????) 我确实将我在eclipse上的文本编码方案从MacRoman更改为UTF-8

2 个答案:

答案 0 :(得分:2)

文本源文件的编码与运行时的情况无关。

Java char 是一个16位宽的值。它总是隐含地为UTF-16。

当编译器生成 .class 文件时,字符文字被转码为UTF-16并存储在类'中的 int 结构中。 constant pool。由于紧凑的原因,字符串将转换为修改后的UTF-8。

当JVM加载任何一个时,它们在内存中表示为UTF-16值/序列。

将值从UTF-16转码为UTF-8:

char c = '\u03B8'; // greek small letter theta θ
for (byte b : String.valueOf(c).getBytes(StandardCharsets.UTF_8)) {
  int unsigned = b & 0xFF;
  System.out.append(" ").print(unsigned);
}

FYI:三字节十进制序列225 182 191是"修饰符小theta"而不是"希腊小写字母theta"

答案 1 :(得分:0)

它应该转换为int,或者用作String并调用方法codepointAt(0)

        char c='Ɵ';
    System.out.println((int)c);
    System.out.println("Ɵ".codePointAt(0));