zoukankan      html  css  js  c++  java
  • 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进制值是
    ",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)+"	");
                }
                System.out.println();
            }catch (UnsupportedEncodingException e){
                System.out.printf("UnsupportedEncodingException: %s编码方式无法解析字符%s
    ", 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识别出的字符是
    ");
                System.out.println(new String(chars));
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    

  • 相关阅读:
    [洛谷P1886]滑动窗口 (单调队列)(线段树)
    树状数组详细解析
    离散化
    kettle使用总结(一)
    springBoot开发的web项目打war包部署到已有的tomcat容器中
    集群时钟同步
    linux服务器安装nginx
    Tomcat学习之体系架构
    码云新建仓库上传项目
    linux系统安装mysql yum方式
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860162.html
Copyright © 2011-2022 走看看