Подтвердить что ты не робот

Поддержка Unicode на разных языках программирования

Я хотел бы иметь каноническое место для объединения информации о поддержке Unicode на разных языках. Является ли он частью основного языка? Предоставляется ли она в библиотеках? Разве это вообще не доступно? Есть ли ресурс, популярный ресурс для информации Unicode на языке? Один язык за ответ, пожалуйста. Также, если вы можете сделать язык заголовком, который облегчит его поиск.

4b9b3361

Ответ 1

Perl

Perl имеет встроенную поддержку Unicode, в основном. Вроде. Из perldoc:

  • perlunitut - Учебник по использованию Unicode в Perl. Во многом учит в абсолютном выражении о том, что вы должны и не должны делать до Unicode. Обложки.
  • perlunifaq - Часто задаваемые вопросы об Unicode в Perl.
  • perluniintro - Введение в Unicode в Perl. Меньше "preachy", чем perlunitut.
  • perlunicode - Если вам абсолютно необходимо знать все, что нужно знать о Unicode и Perl.

Ответ 3

Java

То же, что и в .NET, Java использует UTF-16 внутренне: java.lang.String

A String представляет строку в формате UTF-16, в которой дополнительные символы представлены суррогатными парами (см. раздел Представления символов Unicode в классе Character для получения дополнительной информации). Значения индекса относятся к единицам кода char, поэтому дополнительный символ использует две позиции в String.

Ответ 4

HQ9 +

Команда Q имеет полную поддержку Unicode в большинстве реализаций.

Ответ 5

Delphi

Delphi 2009 полностью поддерживает Unicode. Они изменили реализацию string по умолчанию на 16-разрядную кодировку Unicode, а большинство библиотек, включая сторонние, поддерживают Unicode. См. Marco Cantù Delphi и Unicode.

До Delphi 2009 поддержка Unicode была ограничена, но для хранения 16-разрядной кодированной строки было WideChar и WideString. Подробнее см. Unicode в Delphi.

Обратите внимание: вы все еще можете создавать двуязычное приложение CJKV без использования Unicode. Например, Shift JIS закодированная строка для японского языка может быть сохранена с использованием простой AnsiString.

Ответ 6

Python

Python 2 имеет классы str и unicode. str объекты хранят байты, unicode объекты хранят символы UTF-16. Большинство функций библиотеки поддерживают оба (например, os.listdir('.') возвращает список str, os.listdir(u'.') возвращает список объектов unicode). Оба имеют методы encode и decode.

Python 3 в основном переименован unicode в str. Python 3, эквивалентный str, будет типом bytes. bytes имеет метод decode и str an encode. Поскольку объекты Python 3.3 str используют внутреннее использование одного из нескольких кодировок для сохранения памяти. Для программиста Python он по-прежнему выглядит как абстрактная последовательность юникодов.

Поддержка Python:

  • кодирование/декодирование
  • Нормализация
  • преобразование простого кода и разбиение на пробелы
  • поиск персонажей по имени

Python не поддерживает/имеет ограниченную поддержку:

  • сортировка (ограниченная)
  • конверсии с особыми случаями, где нет сопоставления 1:1 между символами нижнего и верхнего регистра
  • регулярные выражения (он работал)
  • сегментация текста
  • двунаправленная обработка текста

Смотрите также: Правда о Unicode в Python

Ответ 7

.NET(С#, VB.NET,...)

.NET сохраняет строки внутри последовательности System.Char. Один System.Char представляет UTF-16 блок кода.

В документации MSDN на System.Char:

В .NET Framework используется Charструктура для представления Unicode персонаж. Стандарт Unicode идентифицирует каждый символ Юникода с помощью уникальное 21-битное скалярное число, называемое кодовая точка и определяет UTF-16 которая определяет, как кодовая точка кодируется в последовательность одного или более 16-битных значений. каждый 16-битовые значения варьируются от шестнадцатеричного 0x0000 - 0xFFFF и сохраняется в Char.

Дополнительные ресурсы:

Ответ 8

C/С++

С

C до того, как C99 не имеет встроенной поддержки юникода. Он использует нулевые символьные массивы (char* или char[]) как строки. A char определяется байтом (8 бит).

C99 указывает wcs -функции в дополнение к старым str -функциям (например, strlenwcslen). Эти функции принимают wchar_t* вместо char*. wchar_t обозначает широкий характер. Размер wchar_t зависит от компилятора и может быть как 8 бит. Хотя разные компиляторы действительно используют разные размеры, обычно это 16-разрядный (UTF-16) или 32-разрядный (UTF-32).

Большинство функций библиотеки C прозрачны для UTF-8. Например. если ваша операционная система поддерживает UTF-8 (и UTF-8 настроен как ваша система кодировки), то создание файла с использованием fopen, передающего кодированную строку UTF-8, создаст правильно названный файл.

С++

Ситуация в С++ очень похожа (std::stringstd::wstring), но есть, по крайней мере, попытки получить некоторую поддержку unicode в стандартной библиотеке.

Ответ 9

JavaScript

Похоже, что перед JS 1.3 не было поддержки Unicode. Начиная с 1.5, поддерживаются UTF-8, UTF-16 и UCS-2. Вы можете использовать escape-последовательности Unicode в строках, регулярных выражениях и идентификаторах. Источник

Ответ 10

Tcl

Строки Tcl были последовательностями символов Unicode, поскольку Tcl 8.1 (1999). Внутри они динамически изменяются между UTF-8 (строго тот же Модифицированный UTF-8 как Java из-за обработки символов U+00000) и UCS-2 (в сущности и спецификаторе хоста, конечно). Все внешние строки (за одним исключением), включая те, которые используются для связи с ОС, являются внутренне Unicode перед преобразованием в любую кодировку, требуемую для хоста (или настраивается вручную на канале связи). Исключение составляет то, где данные копируются между двумя каналами связи с общей кодировкой (и несколькими другими ограничениями, не связанными здесь), где прямая копия используется нечетная двоичная передача.

Символы вне BMP в настоящее время не обрабатываются ни внутри, ни снаружи. Это известная проблема.

Ответ 11

Схема R6RS

Требуется реализация Unicode 5.1. Все строки находятся в формате Unicode.

Ответ 13

Общие Lisp (SBCL и CLisp)

Согласно this, SBCL и CLisp поддерживают Unicode.

Ответ 14

Objective-C

Нет встроенного, кроме того, что будет доступно как часть библиотеки строк C.

Однако после добавления фреймворков...

Основание (Cocoa и Cocoa Touch) и Core Foundation

NSString и CFString каждый реализует полностью строковый класс на основе Unicode (фактически несколько классов, как деталь реализации). Эти два являются "беспошлинными мостами", так что API для одного можно использовать с экземплярами другого, и наоборот.

Для данных, которые необязательно представляют текст, есть NSData и CFData. NSString предоставляет методы, а CFString предоставляет функции для кодирования текста в данные и декодирования текста из данных. Core Foundation поддерживает более ста разных кодировок, включая все формы UTF. Кодировки делятся на две группы: встроенные кодировки, которые поддерживаются везде, и внешние кодировки, которые, по крайней мере, поддерживаются в Mac OS X.

NSString предоставляет методы для нормализации форм D, KD, C или KC. Каждый возвращает новую строку.

Оба NSString и CFString предоставляют множество вариантов сравнения/сопоставления. Ниже приведены Флаги сравнения опций Foundation и Флаги опций сравнения Core Foundation. Они не все синонимы; например, Core Foundation делает сравнение по буквам (строгому кодовому основанию) по умолчанию, тогда как Foundation делает нелитеральное сравнение (позволяя символам с акцентами сравнивать одинаковые) по умолчанию.

Обратите внимание, что Core Foundation не требует Objective-C; действительно, он был создан в значительной степени, чтобы обеспечить большинство функций программистов Foundation для Carbon, которые использовали прямые C или С++. Тем не менее, я подозреваю, что самое современное его использование в программах Cocoa или Cocoa Touch, все они записаны в Objective-C или Objective-C ++.

Ответ 15

рубин

Единственный материал, который я могу найти для Ruby, довольно старенький и не очень рубист, я не уверен, насколько он точным.

Для записи Ruby поддерживает utf8, но не многобайтовый. Внутри обычно предполагается, что строки являются байтовыми векторами, хотя есть библиотеки и трюки, которые вы обычно можете использовать, чтобы заставить все работать.

Обнаружено, что здесь.

Ruby 1.9

Ruby 1.9 привязывает кодировки к строкам. Двоичные строки используют кодировку "ASCII-8BIT". Хотя по умолчанию кодировка обычно UTF-8 в любой современной системе, вы не можете предположить, что все функции сторонних библиотек всегда возвращают строки в этой кодировке. Он может вернуть любую другую кодировку (например, некоторые партизаны yaml делают это в некоторых ситуациях). Если вы соедините две строки различной кодировки, вы можете получить Encoding::CompatibilityError.

Ответ 17

D

D поддерживает UTF-8, UTF-16 и UTF-32 (char, wchar и dchar соответственно). Таблицу со всеми типами можно найти здесь.

Ответ 18

Arc

У дуги нет поддержки юникода. Пока.

Ответ 19

Ржавчина

Строки ржавчины полностью UTF-8 и не используют нулевые терминаторы и в результате не могут быть проиндексированы как массив, например, они могут быть в C/С++ и т.д.