原文:
hbase客戶端資訊採用byte與伺服器進行通訊,中文字元與byte的轉換的轉換有兩種方式:
1.採用string類自帶的函式
string s = "你好中國";
byte b = s.getbytes();
對應的byte轉換為string為:
s = new string(s.getbytes());
2.採用org.apache.hadoop.hbase.util.bytes類的函式
string s = "你好中國";
byte b = bytes.tobytes(s);
對應的byte轉換為string為:
s = bytes.tostring(bytes.tobytes(s));
方法1 與方法2 都能完成自己的轉換,輸出也正常。
但是兩種方法不能混合使用,因為兩種方法中b值卻一樣,
方法1:b = [-60, -29, -70, -61, -42, -48, -71, -6]
方法2:b = [-28, -67, -96, -27, -91, -67, -28, -72, -83, -27, -101, -67]
原因在於換行的時候採用的charset不一致
在方法2中 bytes.tobytes(s); 最後呼叫的是string類中的s.getbytes("utf-8");而不是s.getbytes()。
s.getbytes("utf-8")與s.getbytes()最後都呼叫了的
static byte encode(string charsetname, char ca, int off, int len)
關鍵在於charsetname不同。
在看s.getbytes()最後的charsetname,
產生的函式為:
public static charset defaultcharset()
} return defaultcharset;
} 跟系統引數file.encoding的值有關,檢視下本機的file.encoding
system.out.println(system.getproperty("file.encoding"));
值為gb18030,因此以上兩種方式產生的byte自然不同,
因此hbase中文字元與byte的轉換要統一編碼格式,全部採用方法2最好,如果要使用string類的方法
使用方法如下:
string s = "你好中國";
byte b = s.getbytes("utf-8");
對應的byte轉換為string為:
s = new string(bytes.tobytes(s),"utf-8");
以上區別只針對與中文的轉換,數字與英文以及"`~!@#$%^&*()_+=-|{}\\/.,<>?"沒有區別!!
輸出中文字元
輸出中文字元 要想在圖形中輸出中文字元,需要對輸出的中文字元進行編碼。使用iconv 函式,可以把一種編碼的字元,轉換為其他編碼的字元。下面介紹在圖形中輸出中文字元的方法,建立乙個新圖形 image imagecreate 400,200 設定背景,分配顏色 bgcolor imagecoloral...
MySQL不能插入中文字元及中文字元亂碼問題
mysql的預設編碼是latin1,不支援中文,要支援中午需要把資料庫的預設編碼修改為gbk或者utf8。在安裝後mysql之後,它的配置檔案不是很給力,不知道你們的是不是,反正我的是!開始插入中文字元的時候出現如下錯誤 error 1366 hy000 incorrect string value...
MySQL不能插入中文字元及中文字元亂碼問題
mysql的預設編碼是latin1,不支援中文,要支援中午需要把資料庫的預設編碼修改為gbk或者utf8。在安裝後mysql之後,它的配置檔案不是很給力,不知道你們的是不是,反正我的是!開始插入中文字元的時候出現如下錯誤 error 1366 hy000 incorrect string value...