java 中文读取
在不同编码方式下中文字符的16进制值
编码方式不同,中文的16进制值也是不同的,例如“中”字
package JavaIOTest;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class ShowChineseEncodeValue {
public static void main(String[] args) {
String chinese = "中";
showCode(chinese);
}
private static void showCode(String str){
String[] encodes = new String[]{"BIG5","GBK","GB2312","UTF-8","UTF-16","UTF-32"};
for (String encode : encodes){
showCode(str,encode);
}
}
private static void showCode(String str,String encode){
try{
System.out.printf("字符:\"%s\"在编码方式%s下的16进制值是\n",str,encode);
//getBytes()得到系统默认编码的字节数组
//getBytes("GBK")得到指定编码的字符数组
byte[] bs = str.getBytes(encode);
// System.out.println(Arrays.toString(bs));
for (byte b : bs){
int i = b&0xff;//
System.out.print(Integer.toHexString(i)+"\t");
}
System.out.println();
}catch (UnsupportedEncodingException e){
System.out.printf("UnsupportedEncodingException: %s编码方式无法解析字符%s\n", encode, str);
}
}
}
用字节流读取中文
1、首先需要知道文本是以那种编码方式保存字符的,
2、用字节流读取文本后用对应的编码方式去识别就能得到正确的字符
准备一个textFile.txt文件,保存的编码格式为UTF-8,下面使用字节流进行读取
package JavaIOTest;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadChineseByFileInputeStream {
public static void main(String[] args) {
File textFile = new File("d:/xyz/z/zzz/zzzz/textFile.txt");
byte[] bytes = new byte[(int)textFile.length()];
try(FileInputStream fileInputStream = new FileInputStream(textFile) ){
fileInputStream.read(bytes);
System.out.println(new String(bytes,"UTF-8"));
}catch (IOException e){
e.printStackTrace();
}
}
}
使用FileReader读取文本
FileReader得到的是字符,所以一定是已经把字节根据某种编码识别成了字符了
而FileReader使用的编码方式是Charset.defaultCharset()的返回值。FileReader是不能手动设置编码方式的,为了使用其他的编码方式,只能使用InputStreamReader来代替,像这样:
new InputStreamReader(new FileInputStream(f),Charset.forName("UTF-8"));
package JavaIOTest;
import java.io.*;
import java.nio.charset.Charset;
public class ReadChineseByFileReader {
public static void main(String[] args) throws UnsupportedEncodingException, FileNotFoundException {
File textFile = new File("d:/xyz/z/zzz/zzzz/textFile.txt");
System.out.println("默认的编码方式是"+ Charset.defaultCharset());
char[] chars = new char[(int)textFile.length()];
try(FileReader fileReader = new FileReader(textFile)){
fileReader.read(chars);
System.out.printf("FileReader会使用默认的编码方式%s,识别出的字符是%n",Charset.defaultCharset());
System.out.println(new String(chars));
}catch (IOException e){
e.printStackTrace();
}
try (InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(textFile),Charset.forName("utf-8"))){
inputStreamReader.read(chars);
System.out.printf("InputStreamReader指定编码方式UTF-8识别出的字符是\n");
System.out.println(new String(chars));
}catch (IOException e){
e.printStackTrace();
}
}
}