问题:在读一个 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", "");
后果展现: