当前位置: 首页 > 工具软件 > ICU4J > 使用案例 >

在java中通过icu4j来读取文件的编码格式

段干长恨
2023-12-01

前段时间公司项目有一个需求,需要读取解析本地CSV文件,将里面的内容在画面上以selectbox的形式表现出来。读取CSV文件的时候就涉及到check处理了。

其中有一个check处理让我困扰了很久,就是判断读入的CSV文件的编码格式是否符合在Java中所设定的编码格式。如果在Java中进行CSV文件读入时所设定的编码格式为【Shift-JIS】,而本地CSV文件的保存编码格式为【UTF-8】,那么读入后的日文汉字就会出现乱码现象。

起初我以为能够有方法来准确地读取文件的编码格式,但随着调查的不断深入才了解到,没有任何一种方法是能够准确地获得文件的编码格式。所以一些共同jar包里的方法其实都是用概率来推测这个文件所属的编码格式。
最终,我选择了下面的icu4j来进行编码格式的获取。

  • 首先配置maven,将jar包引入到工程。
<dependency>
    <groupId>com.ibm.icu</groupId>
    <artifactId>icu4j</artifactId>
    <version>58.2</version>
</dependency>
  • 引入后就可以来调用了。
    /**
     * 文字コードを取得
     * 
     * @param aFile
     * @return 文字コード
     */
    public String getFileCharset(final File aFile) {
           String encoding = null;
           try {
               Path path = Paths.get(aFile.getPath());
               byte[] data = Files.readAllBytes(path);
               CharsetDetector charsetDetector = new CharsetDetector();
               charsetDetector.setText(data);
               CharsetMatch charsetMatch = charsetDetector.detect();
               encoding = charsetMatch.getName();
           } catch (IOException e) {
               // なし
           }
           return encoding;
       }

经过简单的测试发现,同一文本进行读入,如果我删掉了一行数据,那么最终获取的编码格式会发生变化。所以最终这个check处理被pass了。

毕竟,甲方就是上帝嘛。。。

 类似资料: