場景描述:
項目中通過java代碼中從數據庫中查詢一系列數據,對數據做相應處理,然后通過字符流將數據寫如一個新生成的文件中,將該項目部署在linux服務器上,最后生成的文件拿到本地使用notepad++打開會在部分數據末尾出現NUL
排查原因:
- NUL在C語言中是一個特殊字符常量'\0',空字符
- 在linux中處理字符串寫入,每行字符串結尾如果是空字符,linux就會用'\0'表示
解決方案:
使用該文件時將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;
}
