2016-09-21 83 views

回答

2

這是怎麼發生的?

HBase的外殼use org.apache.hadoop.hbase.util.Bytes::toStringBinary as the default convertor,我在hbase-shell/src/main/ruby/hbase/table.rb舉這個從FUNC convert(column, kv)

toStringBinary中的代碼可以解釋爲什麼發生這種情況。

for (int i = off; i < off + len ; ++i) { 
    int ch = b[i] & 0xFF; 
    if ((ch >= '0' && ch <= '9') 
     || (ch >= 'A' && ch <= 'Z') 
     || (ch >= 'a' && ch <= 'z') 
     || " `[email protected]#$%^&*()-_=+[]{}|;:'\",.<>/?".indexOf(ch) >= 0) { 
    result.append((char)ch); 
    } else { 
    result.append(String.format("\\x%02X", ch)); 
    } 
} 

作爲代碼所示,'\'將顯示爲ASCII碼,其是\x5C

如何解決這個問題?

我不認爲有這樣的需求。原因Hbase選擇顯示'\' ascii代碼但不是字符是,當遇到'\',你可以確定你正在面對ascii代碼。

+0

有沒有什麼辦法可以強制hbase不把'\'轉換成它的ASCII碼? –

+0

@AbhashKumar它只是'Hbase shell'選擇顯示的方式,在後端存儲中,您可以從hbase使用java驅動程序讀取內容,然後您可以自行處理它。 –

相關問題