2009-05-21 2 views
3

Имея некоторые проблемы, разглядывающие различия между UTF-8, UTF-16, ASCII и ANSI. После некоторых исследований у меня есть идея, но было бы очень полезно, если бы кто-то мог точно объяснить разницу между ними (включая представление байтов типичного символа из каждого).Путаница кодировки символов!

Я Quess мой вопрос сводится к

1) How do each of the above store characters as bytes 
2) What are the differences between the above standards 
3) What is a code page 
4) Method of converting characters between the various types. 

Много много спасибо :)

+0

Связанный вопрос (большинство голосов в теге unicode): http://stackoverflow.com/questions/222386 – mghie

ответ

12

Я нашел Joel's article на Unicode, чтобы объяснить это очень хорошо. В частности, он охватывает историю (существенную для этого предмета), кодировки (UTF-8/16 и т. Д.) И кодовые страницы.

0

O'Reilly CJKV обработки информации содержит много фона на наборы символов и кодировки символов: при этом особое внимание на данные CJKV, конечно. Я сочла полезным получить свое понимание за пределами «как мне получить символ! *! ** # @ Euro, чтобы правильно отображаться?».

0

В Unix используется программа под названием recode или iconv для преобразования текстовых файлов в другой кодировке, или использовать функцию iconv (man 3 iconv) в вашем C или программы C++.

Если вы используете Perl, используйте модуль Encode для преобразования (например, use Encode; print encode("utf-8", "\xabfoo")). Если вы используете Python, используйте unicode.encode и/или str.decode (например, print u'\xabfoo'.encode('utf-8')).

4

Чтобы быстро ответить на ваши конкретные вопросы.

1: Определенная комбинация бит представляет собой определенный символ. Один символ может храниться в нескольких байтах.

2: Краткая информация и отличия между указанными вами кодировками.

ASCII
Включает определения для 128 символов.

ANSI
имеет больше символов, чем ASCII, но по-прежнему помещается в октета. Требуется кодовая страница.

UTF-8
Это может использоваться для представления любого символа Unicode. Есть много других символов Unicode, чем ASCII. Он хранит каждый символ в одном-четырех октетах данных.

UTF-16
Подобно UTF-8, но основная единица составляет 16 бит. Если вы просто используете английский, вы тратите 8 бит на каждого персонажа.

3: Кодовая страница - это то, что указывает на компьютер, который (комбинация бит) относится к какому символу. Unicode не нуждается в кодовых страницах, поскольку каждый символ имеет собственную уникальную битовую комбинацию. ANSI имеет кодовые страницы, так как имеет только 256 доступных символов.Например, если бы вы были на арабском компьютере, у вас был бы арабский набор в качестве кодовой страницы, и арабские символы могли отображаться.

4: Метод преобразования зависит от набора символов, который вы конвертируете в и из, и используемых кодовых страниц (если есть). Некоторые преобразования могут быть невозможны. UTF-8 обратно совместим с ASCII, то есть если ваш текст содержит только первые 128 символов США, он точно такой же, как тот же текст в кодировке ASCII.

Этот ответ был ad-hoc и могут быть ошибки, исправления приветствуются.

0

Несколько случайных точек, которые полезно знать:

  • Интересная вещь о UTF-8 и ASCII является то, что 127 ASCII символы кодируются точно таким же образом, в UTF- 8 (это также может быть случай с другими схемами UTF, я не знаю). Другими словами, в диапазоне ASCII или символах оба ASCII и UTF-8 полностью заменяют .

    Способ, которым это происходит, заключается в том, что UTF-8 является переменной длиной; «первые» 127 символов представлены одним байтом по . Помимо этого, он начинает использовать несколько байтов. Как декодер знает, следует ли интерпретировать байт как один символ ASCII или как часть многобайтовой последовательности? Поскольку биты в начале байта следуют определенные закономерности: а нулевой бит в начале означает, что это однобайтная характер, и п 1 бит означает этот байт является началом п байтовой последовательности.

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

  • UTF-8 также является стандартом для XML.

Смежные вопросы