- Javaは、16ビットのUnicode文字タイプであるが、中国語、2つのバイトが、(一般的なシステムデフォルト)場合は、UTF-8とはバイトリードの配列に変換され、3バイトとなるであろう。
- Unicode文字セット、UTF-8 / UTF-16符号化規則、または一般化Unicode文字セットとコードルールを複数含みます。その文字セットは、バイナリコードを指定し、ルールをコードする各文字は、バイナリコードを保存する方法を指定します。
- (それは窓の下の原因プログラミングに最善ではないので、より複雑なUTF-8)次に、UTF-16あなたはビッグエンディアン(ビッグエンディアン順)とリトルエンディアン(リトルエンディアン順)についての質問です。
- コーディング規則を指定しない場合は、Javaの、charの漢字では、getByte結果は、デフォルトではUTF-8、中国の3バイトである場合は、UnicodeまたはUTF-16、デフォルトでは、4バイトであります最初の2つのバイトが0xFEFFビッグエンディアンを表し、0xFFEFはリトルエンディアンを示す場合には、UTF-16BEまたはUTF-16LE指定し、2バイトであり、
package IOTest;
import javax.management.StandardEmitterMBean;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public class CharTest {
public static void main(String[] args) throws UnsupportedEncodingException {
//Java的char是两字节的Unicode字符(0-65535)
char b='中';
System.out.println((int)b);
byte[] bs=char2Byte(b);
System.out.println(byte2HexString(bs));
byte[] cs=String.valueOf(b).getBytes("unicode");
byte[] ds=String.valueOf(b).getBytes(StandardCharsets.UTF_16BE);
byte[] es=String.valueOf(b).getBytes(StandardCharsets.UTF_16LE);
byte[] fs=String.valueOf(b).getBytes(StandardCharsets.UTF_16);
byte[] gs=String.valueOf(b).getBytes(StandardCharsets.UTF_8);
System.out.println(byte2HexString(cs));
System.out.println(byte2HexString(ds));
System.out.println(byte2HexString(es));
System.out.println(byte2HexString(fs));
System.out.println(byte2HexString(gs));
}
public static byte[] char2Byte(char c){
byte[] ans=new byte[2];
ans[1]=(byte)(c&0x00ff);
ans[0]=(byte)((c&0xff00)>>8);
return ans;
}
public static String byte2HexString(byte[] bs){
StringBuilder sb=new StringBuilder();
for(byte b:bs){
int c=b&0x0f;
if(c<10){
sb.append(c);
}else{
sb.append((char)((c-10)+'A'));
}
c=(b&0xf0)>>4;
if(c<10){
sb.append(c);
}else{
sb.append((char)((c-10)+'A'));
}
sb.append(' ');
}
return sb.toString();
}
}