使用IO流將數據庫中數據生成一個文件,結果使用Notepad++打開部分數據結尾出現NUL
阿新 • • 發佈:2018-09-25
port pub != 生成 lis [] light odi byte
場景描述:
項目中通過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; }
使用IO流將數據庫中數據生成一個文件,結果使用Notepad++打開部分數據結尾出現NUL