所以,我有一个char []数组包含文本和其他数据。读中国字符到一个字符串从一个字节缓冲器
我如何可以提取来自焦炭[]数组中国文字?现在,我可以得到的英语罚款
public String getString(int index, int length) {
String str = "";
for (int i = 0; i < length && this.data[index + i] != 0; i++)
str = str + this.data[index + i];
return str;
}
那么我想这一点:
try {
String charset = "GB18030";
String str = new String(m.target.getBytes("UTF-16"), "GB18030");
System.out.println(str);
System.out.println(str.equals("大家"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
m.target是一个字符串我已经从byte []数组与得到的getString()以上。我已经试过各种编码以及它们的组合,其中没有将正确的(大家)显示的文本,并没有将用于str.equals返回true(“大家”)
编辑
使用这种方法我可以成功地获得汉字。
public String test(int index, int length) {
byte[] t = new byte[this.data.length];
for (int i = 0; i < this.data.length; i++)
t[i] = (byte) this.data[i];
try {
return new String(t, index, length, "GB18030");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
但我现在的问题是..我以为最大的一个字节可能是127?字节数组如何保存高字节汉字?我可以安全地将缓冲区更改为字节[]而不是char []?
的帮助你为什么要同时使用' “UTF-16”'和' “GB18030”'?为什么不这样做:'new String(this.data,offset,length,“UTF-16”)'? – 2012-01-15 20:39:19
我错误说我是使用用于一个this.data byte []数组。它实际上是一个字符数组。如果它是一个字节[]数组不会无法保存unicode文本?由于一个字节可以容纳的最大值是127? – marcaddeo 2012-01-15 20:45:51
'char []'将包含UTF-16代码单元的文本。一个'byte []'可以包含任何编码中的文本,因为文本编码只不过是一种将字符编号映射为字节的方式。 – Joey 2012-01-15 20:59:39