编码问题
1.gbk编码中一个中文汉字两个字节,一个英文一个字节。
2.utf-8编码中一个中文汉字占3个字节,一个英文一个字节。
3.utf-16be编码中一个中文汉字和英文都是占用两个字节。
4.java中一个字符占两个字节,所以可以放入一个中文汉字。因为默认的gbk汉字占用两个字节。
5.java是双字节编码utf-16be
6.在使用中文编译器编写中文文档时,默认使用ANSI编码表,复制粘贴时会自动转换成对应的编码表。
7.用什么编码表编写的字符串,就要用什么编码表读取,否则会出现乱码。
8.eclipse中默认是gbk编码。
androidstudio可以在Editor下的File Encodings下设置编码格式
贴出代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String str="小ABC";
try {
//GBK编码中一个中文占2个字节,一个英文占一个字节
byte[]bytes1=str.getBytes("gbk");
for(byte b:bytes1){
Log.i("输出",Integer.toHexString(b & 0xff)+"-----------");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
//utf-8编码中一个中文占三个字节,一个英文占一个字节
byte []bytes=str.getBytes("utf-8");
for(byte b:bytes){
Log.i("输出",Integer.toHexString(b & 0xff)+"****");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//java是双字节编码 utf-16be
byte[]byte1= new byte[0];
try {
//utf-16be编码中,一个中文占2个字节,一个英文占2个字节
byte1 = str.getBytes("utf-16be");
for(byte b:byte1){
Log.i("输出",Integer.toHexString(b & 0xff)+"");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
/***当你的字节序列是某种编码时,这个时候想把字节序列变成字符串
* 也需要使用这种方式,否则会出现乱码*/
try {
String str1 = new String(byte1,"utf-16be");//byte1是utf-16be编码,换成别的就会乱码
Log.i("输出",str1+"");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}