我正在嘗試將文件的名稱寫入Accumulo。我正在使用accumulo-core-1.43。將文本寫入Accumulo時,尾部爲空( x00)字符
出於某種原因,某些文件似乎被寫入Accumulo,並在名稱末尾有\ x00個字符。上傳是通過一個Java servlet(使用jquery文件上傳插件)。在servlet中,我檢查了的System.out.println文件的名稱和它看起來很正常,我甚至試圖與
org.apache.commons.lang.StringEscapeUtils.unescapeJava(...);
實際寫作的反向轉義字符串accumulo看起來像這樣:
Mutation mut = new Mutation(new Text(checkSum));
Value val = new Value(new Text(filename).getBytes());
long timestamp = System.currentTimeMillis();
mut.put(new Text(colFam), new Text(EMPTY_BYTES), timestamp, val);
但沒有什麼不尋常的出現在那裏(也許\ x00沒有逃脫)?但是,如果我在accumulo中對我的表進行掃描,文件名中將會有一個或多個\ x00。
這似乎是造成這個問題的原因是,當我檢索文件列表(顯示位置)時,我返回XML中的字符串,並將該文件傳回給瀏覽器,應該呈現信息的XSL當有這些額外的字符時XML不再起作用(不確定爲什麼這種情況)。
在鉻中,對於這些調用的響應,我看到文件名後面有三個紅點,當我將鼠標懸停在它上面時,\ u0彈出(我認爲它是0/null的不同表示形式? )。
無論如何,我只是想弄清楚爲什麼會發生這種情況,或者至少在我用Java返回文件之前如何過濾出\ x00個字符。有任何想法嗎?
這可能有幫助。接受的答案有一個正則表達式,用於刪除空字符。 http://stackoverflow.com/questions/2362302/error-about-invalid-xml-characters-on-java – austin
謝謝!我會研究一下,看看它是否有效。 – jfoo
轉義與它有什麼關係?這是問題的尾隨null。找到來自哪裏並修復它。很可能你忽略了'read()'返回的長度,並假定它填充了緩衝區。 – EJP