UTF8 по сравнению с UTF16 по сравнению с символом*, по сравнению с какой? Кто-то объясняет эту путаницу мне!

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

33
задан hippietrail 31 March 2011 в 09:52
поделиться

5 ответов

Проверьте Joel Spolsky Абсолютный минимум Каждый Разработчик программного обеспечения Absolutely, Положительно Должен Знать О Unicode и Наборах символов (Никакие Оправдания!)

РЕДАКТИРОВАНИЕ 20140523 : Кроме того, смотрите Символы, Символы и Чудо Unicode Tom Scott на YouTube - это просто младше десяти минут и замечательного объяснения блестящего 'взлома', который является UTF-8

76
ответ дан 27 November 2019 в 17:28
поделиться

Полученная мудрость предполагает, что статья Spolsky упускает несколько важной сути.

Эта статья рекомендуется как являющийся больше завершенным: Стандарт UnicodeВ®: Техническое Введение

Эта статья является также хорошим введением: Основы Unicode

последний в особенности дает обзор форм кодировки символов и схемы Unicode.

12
ответ дан 27 November 2019 в 17:28
поделиться

Кодировка символов состоит из последовательности кодов, что каждый ищет символ от данного набора символов. См. эту хорошую статью о Википедия на кодировке символов .

UTF8 (UCS) использование 1 - 4 байта для каждого символа. Википедия дает хорошее краткое изложение того, как многобайтовое краткое изложение работает:

  • старший значащий бит однобайтового символа всегда 0.
  • старшие значащие биты первого байта многобайтовой последовательности определяют длину последовательности. Эти старшие значащие биты 110 для двухбайтовых последовательностей; 1110 для трехбайтовых последовательностей, и так далее.
  • остающиеся байты в многобайтовой последовательности имеют 10 как их два старших значащих бита.
  • А поток UTF-8 не содержит ни FE байта, ни И следующие. Это удостоверяется, что поток UTF-8 никогда не похож на поток UTF-16, запускающийся с U+FEFF (Метка Порядка байтов)

, страница также показывает Вам большое сравнение между преимуществами и недостатками каждого типа кодировки символов.

UTF16 (UCS2)

Использование 2 байта к 4 байтам для каждого символа.

UTF32 (UCS4)

использование 4 байта всегда для каждого символа.

символ просто означает байт данных и не является фактическим кодированием. Это не походит на UTF8/UTF16/ascii. Символ* указатель может относиться к любому типу данных и любому кодированию.

STL:

станд. Обоих stl:: wstring и станд.:: строка не разработана для кодировок символов переменной длины как UTF-8 и UTF-16.

, Как реализовать:

Смотрят на iconv библиотеку. iconv является мощной библиотекой преобразования кодировки символов, пользовавшейся такими проектами как libxml (XML C синтаксический анализатор Gnome)

Другие большие ресурсы на кодировке символов:

25
ответ дан 27 November 2019 в 17:28
поделиться

Различные стандарты UTF являются способами закодировать "кодовые точки". Кодовая точка является индексом в набор символа Unicode.

Другое кодирование является UCS2, который всегда является 16 битами и таким образом не поддерживает полный Диапазон Unicode.

Хороший для знания также, что одна кодовая точка не равна одному символу. Например, символ, такой как ГҐ может быть представлен и как кодовая точка или как две кодовых точки один для a и один для кольца.

Сравнение двух строк unicode таким образом требует, чтобы нормализация получила каноническое представление перед сравнением.

4
ответ дан 27 November 2019 в 17:28
поделиться

Существует также проблема со шрифтами. Существует два способа обработать шрифты. Или Вы используете гигантский шрифт с глифами для всех символов Unicode, в которых Вы нуждаетесь (я думаю, что последние версии Windows идут с одним или двумя такими шрифтами). Или Вы пользуетесь som библиотекой, способной к объединяющимся глифам от различных шрифтов, выделенных подмножествам стандарта Unicode.

1
ответ дан 27 November 2019 в 17:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: