gpt4 book ai didi

java - 从字节缓冲区将中文字符读入字符串

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:24 25 4
gpt4 key购买 nike

所以我有一个包含文本和其他数据的 char[] 数组。

如何从 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 是我使用上面的 getString() 从 byte[] 数组中获取的字符串。我已经尝试了各种编码和它们的组合,但它们都不能正确显示文本(大家)并且没有一个会为 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?字节数组如何容纳高字节汉字?我可以安全地将缓冲区更改为 byte[] 而不是 char[] 吗?

最佳答案

Java 中的charString 都是Unicode。只要在 Java 代码中对其进行操作,就不必关心它。您在与 byte[] 数组转换或从 IO 流 读取/写入时指定编码。

要声明包含中文字符的字符串,您可以使用转义序列或直接将它们写在代码中,但您必须注意文件编码。 UTF-8 格式是现在的准标准格式,IDE(如 Eclipse)和构建工具(maven、ant)都支持它。

所以你只要写

char ch = '大';
char[] chrs = new char[]{'大','家'};
String str = "大家";

要从例如 UTF-16 编码的文件中读取中文字符,您可以使用 InputStreamReader 指定正确的编码,然后您可以读取字符串,例如在 BufferedReader

的帮助下
    BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream("myfile.txt"), "UTF-16"));

关于java - 从字节缓冲区将中文字符读入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com