Поддержка Unicode на разных языках программирования - PullRequest
31 голосов
/ 24 июня 2009

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

Ответы [ 20 ]

11 голосов
/ 25 июня 2009

Perl

Perl имеет встроенную поддержку Unicode, в основном. Вроде, как бы, что-то вроде. От perldoc:

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

Python 3k

Python 3k (или 3.0 или 3000) имеет новый подход для обработки текста (Unicode) и данных:
Текст Vs. Данные вместо Unicode Vs. 8-бит . См. Также Unicode HOWTO .

7 голосов
/ 24 июня 2009

Java

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

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

7 голосов
/ 24 февраля 2011

HQ9 +

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

4 голосов
/ 24 июня 2009

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 и encode. Начиная с Python 3.3 str объекты внутренне используют одну из нескольких кодировок для экономии памяти. Для программиста на Python он все еще выглядит как абстрактная последовательность Юникода.

Python поддерживает:

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

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

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

См. Также: Правда о Юникоде в Python

4 голосов
/ 28 июня 2009

Delphi

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

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

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

4 голосов
/ 09 февраля 2011

Go

Язык программирования Google Go поддерживает Unicode и работает с UTF-8.

3 голосов
/ 23 августа 2010

Схема R6RS

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

3 голосов
/ 23 августа 2010

Tcl

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

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

3 голосов
/ 24 июня 2009

.NET (C #, 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 .

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

...