The HBase shell currently only prints out ASCII printable range of characters, and not unicode, to make it easier to pass around values. In practice, HBase keys are often not designed to be readable and are binary forms (such as encoded integers of hashed values, etc.).
That said, the HBase shell is a programmable JRuby console, so you can use HBase Java APIs within it to get a desired output if you are going to be relying on HBase shell for your scripting work.
Here's a simple example:
hbase(main):013:0> config = org.apache.hadoop.hbase.HBaseConfiguration.create
=> #<Java::OrgApacheHadoopConf::Configuration:0x4a864d4d>
hbase(main):014:0> table = org.apache.hadoop.hbase.client.HTable.new(config, 't')
=> #<Java::OrgApacheHadoopHbaseClient::HTable:0x5e85c21b>
hbase(main):015:0> scanner = table.getScanner(Scan.new())
=> #<Java::OrgApacheHadoopHbaseClient::ClientScanner:0x5aa76ad2>
hbase(main):030:0> scanner.each do |row|
hbase(main):031:1* key = String.from_java_bytes(row.getRow())
hbase(main):032:1> puts "'#{key}'"
hbase(main):033:1> end
'我'