Строки Unicode в памяти процесса - PullRequest
3 голосов
/ 24 декабря 2008

Каков наиболее предпочтительный формат строк Юникода в памяти, когда они обрабатываются? А почему?

Я реализую язык программирования, создавая образ исполняемого файла для него. Очевидно, что для реализации рабочего языка программирования требуется протокол для обработки строк.

Я думал об использовании динамических массивов в качестве основы для строк, потому что они очень просты в реализации и очень эффективны для коротких строк. Я просто понятия не имею о наилучшем из возможных форматов символов при использовании строк таким образом.

Ответы [ 2 ]

4 голосов
/ 24 декабря 2008

UTF16 является наиболее широко используемым форматом.

Преимущество UTF16 над UTF8 заключается в том, что, несмотря на меньшую компактность, каждый символ имеет постоянный размер 2 байта (16 бит) - если вы не используете суррогаты (при использовании 2-байтовых символов кодировка называется UCS-2 ).

В UTF8 есть только небольшой набор символов, закодированных в 1 байт, другие занимают 4 байта. Это делает обработку символов менее прямой и более подверженной ошибкам.

Конечно, использование Unicode предпочтительнее, так как позволяет использовать международные символы.

3 голосов
/ 24 декабря 2008

В серии C Python 2.x используются UTF-16 и UCS-4 в зависимости от платформы / сборки / и т. Д.

Вот интересное обсуждение от python-dev о требованиях и компромиссах при выборе внутреннего представления Unicode для Python 3.0. Хотя там больше контента, чем я могу кратко описать, оно включает в себя:

  • Обсуждение внешнего интерфейса (срезы с постоянным временем, эффективные реализации .lower, .islower и т. Д.)
  • Внешние требования (GTK принимает строки UTF-8, QT принимает строки UTF-16 и UCS-4, Windows принимает строки UT-16 и т. Д.)
  • Указывает на другие реализации данных Unicode (например, QT).
  • Здесь обсуждаются важные варианты использования (которые тесно связаны с внешним интерфейсом).
  • и т.д.
...