有一些令人困惑的事情,
我试图获取小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
答案 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));