zoukankan      html  css  js  c++  java
  • 本地文件读取(csv,txt)时字符编码问题解决

      今天进行csv文件读取时,老是入库为空,因为其中有中文字符,我要通过中文字符映射成相应的编号(上升:1011,下降:1012),于是怎么也取不到编号.刚开始以为程序映射出了问题,最后日志打出来后,发现读取的csv文件内容中文全为乱码.啊啊啊,好坑.于是看了下别人写的读取csv文件的代码,果然是没有设置字符编码.通过字符读取文件,转为字节流一定要进行字符编码设置,否则跑到测试环境或生产环境会使用本地默认字符集,那就坑大了.

      问题代码:

    BufferedReader in = new BufferedReader(new FileReader(this.inputCsvFile));

      解决方式:

    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(this.inputCsvFile), "UTF-8"));
    

    就这两行不同的代码却有着不同的效果,神奇吧.

    接下来我就说一说原理,我觉得人家说的挺好,于是就引用人家说的.

    Java的I/O类处理如图:

    Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类,InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换,而具体字节到字符的解码实现它由 StreamDecoder 去实现,在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。值得注意的是如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码。

    Figure xxx. Requires a heading

                                        Java的I/O类处理图

    总结:Java读取数据流的时候,一定要指定数据流的编码方式,否则将使用本地环境中的默认字符集。

    参考链接:

    https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

    http://sd8089730.iteye.com/blog/1290895

    http://blog.csdn.net/greenqingqingws/article/details/7395213

     

  • 相关阅读:
    test
    4css
    3css
    2css
    5html
    1css
    4html
    3html
    2html
    1.3 tensorflow2.0 常用函数
  • 原文地址:https://www.cnblogs.com/fxust/p/7118416.html
Copyright © 2011-2022 走看看