LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

Отвечаю не на пост, лор глючит.

А при чём тут UTF-16? В UCS-4 это один символ (сам пишешь U+10330).

При том, что в Java он хранится в кодировке UTF-16.

Этот пример расходится с твоей трактовкой «четверть количества байт в кодировке UCS-4».

Ничуть. Этот символ, как и любой другой, в UCS-4 занимает ровно 4 байта.

Ещё раз. Два примера: латинская буква «A» и готическая буква «Ahsa».

        String a = "\u0041"; // latin A
        String ahsa = "\ud800\udf00"; // gothic Ahsa
        System.out.println(a.length()); // 1
        System.out.println(ahsa.length()); // 2
        System.out.println(a.getBytes("UTF-32").length); // 4
        System.out.println(ahsa.getBytes("UTF-32").length); // 4
При этом обе эти строки при кодировке в UTF-32 будут занимать 4 байта, несмотря на то, что length в Java для них возвращает разные значения.

Поэтому для строки a твоё предположение

Считаю верным вариант «четверть количества байт в кодировке UCS-4»

верно. length() возвращает 1, количество байтов в кодировке UTF-32 4.

Но для строки ahsa твоё предположение уже неверно. length() возвращает 2, а количество байтов в кодровке UTF-32 по прежнему 4.

Исправление Legioner, :

Отвечаю не на пост, лор глючит.

А при чём тут UTF-16? В UCS-4 это один символ (сам пишешь U+10330).

При том, что в Java он хранится в кодировке UTF-16.

Этот пример расходится с твоей трактовкой «четверть количества байт в кодировке UCS-4».

Ничуть. Этот символ, как и любой другой, в UCS-4 занимает ровно 4 байта.

Ещё раз. Два примера: латинская буква «A» и готическая буква «Ahsa».

        String a = "\u0041"; // latin A
        String ahsa = "\ud800\udf00"; // latin Ahsa
        System.out.println(a.length()); // 1
        System.out.println(ahsa.length()); // 2
        System.out.println(a.getBytes("UTF-32").length); // 4
        System.out.println(ahsa.getBytes("UTF-32").length); // 4
При этом обе эти строки при кодировке в UTF-32 будут занимать 4 байта, несмотря на то, что length в Java для них возвращает разные значения.

Поэтому для строки a твоё предположение

Считаю верным вариант «четверть количества байт в кодировке UCS-4»

верно. length() возвращает 1, количество байтов в кодировке UTF-32 4.

Но для строки ahsa твоё предположение уже неверно. length() возвращает 2, а количество байтов в кодровке UTF-32 по прежнему 4.

Исходная версия Legioner, :

А при чём тут UTF-16? В UCS-4 это один символ (сам пишешь U+10330).

При том, что в Java он хранится в кодировке UTF-16.

Этот пример расходится с твоей трактовкой «четверть количества байт в кодировке UCS-4».

Ничуть. Этот символ, как и любой другой, в UCS-4 занимает ровно 4 байта.

Ещё раз. Два примера: латинская буква «A» и готическая буква «Ahsa».

        String a = "\u0041"; // latin A
        String ahsa = "\ud800\udf00"; // latin Ahsa
        System.out.println(a.length()); // 1
        System.out.println(ahsa.length()); // 2
        System.out.println(a.getBytes("UTF-32").length); // 4
        System.out.println(ahsa.getBytes("UTF-32").length); // 4
При этом обе эти строки при кодировке в UTF-32 будут занимать 4 байта, несмотря на то, что length в Java для них возвращает разные значения.

Поэтому для строки a твоё предположение

Считаю верным вариант «четверть количества байт в кодировке UCS-4»

верно. length() возвращает 1, количество байтов в кодировке UTF-32 4.

Но для строки ahsa твоё предположение уже неверно. length() возвращает 2, а количество байтов в кодровке UTF-32 по прежнему 4.