场景描述:
项目中通过java代码中从数据库中查询一系列数据,对数据做相应处理,然后通过字符流将数据写如一个新生成的文件中,将该项目部署在linux服务器上,最后生成的文件拿到本地使用notepad++打开会在部分数据末尾出现NUL
排查原因:
- NUL在C语言中是一个特殊字符常量' ',空字符
- 在linux中处理字符串写入,每行字符串结尾如果是空字符,linux就会用' '表示
解决方案:
使用该文件时将NUL替换为“ ”空字符
public static String trimnull(String string) throws UnsupportedEncodingException {//该方法作用是使用" "替换一个字符串中的所有NUL ArrayList<Byte> list = new ArrayList<Byte>(); byte[] bytes = string.getBytes("UTF-8"); for(int i=0;bytes!=null&&i<bytes.length;i++){ if(0!=bytes[i]){//排除NUL(0) list.add(bytes[i]); }else { byte b = 32;//空字符对应的byte值 list.add(b); } } byte[] newbytes = new byte[list.size()]; for(int i = 0 ; i<list.size();i++){ newbytes[i]=(Byte) list.get(i); } String str = new String(newbytes,"UTF-8"); return str; }