Чтение китайских символов в строку из байтового буфера - PullRequest
4 голосов
/ 16 января 2012

Итак, у меня есть массив 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 - это строка, которую я получил из массива byte [] сgetString () выше.Я пробовал различные кодировки и их комбинации, и ни одна из них не будет отображать текст правильно (大家), и ни одна из них не вернет true для str.equals ("大家")

РЕДАКТИРОВАТЬ

Используя этот метод, я могу успешно получить китайские иероглифы.

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 []?

1 Ответ

4 голосов
/ 16 января 2012

Обе char и String в Java являются Unicode. Вам не нужно заботиться об этом, пока вы работаете с ним в коде Java. Вы задаете кодировку при преобразовании в / из байтового [] массива или чтения / записи в / из 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"));
...