关于java:JAVA-IO流中字符串编码不一致问题

9次阅读

共计 562 个字符,预计需要花费 2 分钟才能阅读完成。

问题:在读一个 txt 文件中的日期数据 ”2020-06-18″ 存入数据库时,发现读出的 string 怎么转都不能转为 sql.Date 类型。

初步诊断:System.out.println()输入的从流中读的字符串和预期字符串一样,然而 length 属性一个是 21,一个是 10。(因为字符间填充了 ”u0000″,而且是空字符)

空字符输入:System.out.println(“aa”+”u0000″+”bb”)输入为 aabb。不同版本 jvm 可能输入不一样,有的是空格。

症状:通过 debug 发现寄存 string 的 char[]填充了大量的 ”u0000″ 存在,这个是 unicode 编码中 Character 的最小值。
(文件字符流编码默认为 GBK,JVM 默认编码是 UNICODE)

问题截图如下:


解决办法:

可分为两类:设置编码格局;删除所有 ”u0000″。
设置编码
又分为设置流的编码,以及设置 String 的编码。
设置流编码

new BufferedReader(new InputStreamReader(inputStream,"unicode"));

设置 String 编码

str = new String(str.getBytes("GBK"),"unicode");

删除所有 u0000

str = str.replace("\u0000", "");

后果展现:

正文完
 0