Unicode против UTF-8 путаница в Python / Django?

Чтобы понять , почему связывает имя таблицы (или столбца), не работает, вы должны понимать, как работают заполнители в подготовленных операциях: они не просто заменяются как строки (соответственно экранированные) , и результат SQL выполнен. Вместо этого СУБД, попросившая «подготовить» заявление, содержит полный план запросов о том, как он будет выполнять этот запрос, включая те таблицы и индексы, которые он будет использовать, которые будут одинаковыми независимо от того, как вы заполняете заполнители.

План для SELECT name FROM my_table WHERE id = :value будет таким же, как вы его замените :value, но похожее подобное SELECT name FROM :table WHERE id = :value невозможно спланировать, потому что СУБД не знает, какую таблицу вы собираетесь выбрать from.

Это не то, что библиотека абстракции, такая как PDO, может или должна работать, либо потому, что она победит две ключевые цели подготовленных операторов: 1) позволить базе данных заранее решить, как запрос будет запущен и будет использовать один и тот же план несколько раз; и 2) для предотвращения проблем безопасности путем отделения логики запроса от ввода переменной.

30
задан Hanno Fietz 22 August 2008 в 12:01
поделиться

5 ответов

, что такое "строка Unicode" в Python? Это означает UCS-2?

строки Unicode в Python хранятся внутренне любой как UCS-2 (фиксированная длина 16-разрядное представление, почти то же как UTF-16) или UCS-4/UTF-32 (фиксированная длина 32-разрядное представление). Это - опция времени компиляции; в Windows это - всегда UTF-16, пока много дистрибутивов Linux устанавливают UTF-32 (‘wide mode’) для их версий Python.

Вы, как обычно предполагается, не заботитесь: Вы будете рассматривать кодовые точки Unicode как единственные элементы в Ваших строках, и Вы не будете знать, хранятся ли они как два или четыре байта. Если Вы находитесь в сборке UTF-16, и необходимо обработать символы вне Основной Многоязычной Плоскости, Вы будете Делать Ее Неправильно, но это все еще очень редко, и пользователи, которым действительно нужны дополнительные символы, должны компилировать широкие сборки.

плоскость неправильно, или это?

Да, это довольно неправильно. Для ярмарки, я думаю, что учебное руководство довольно старо; это, вероятно, предшествует широким строкам Unicode, если не Unicode 3.1 (версия, которая представила символы вне Основной Многоязычной Плоскости).

существует дополнительный источник беспорядка, происходящего от привычки Windows к использованию термина “Unicode” для значения, а именно, кодирование UTF-16LE, которое NT использует внутренне. Люди от Microsoftland могут часто копировать эту несколько вводящую в заблуждение привычку.

48
ответ дан Hanno Fietz 22 August 2008 в 23:01
поделиться
  • 1
    Мы теряем преимущество Края как автономный класс: прежде чем это можно было инстанцировать, и это имело объектные Методы фабрики – javadba 3 February 2014 в 12:43

Python хранит Unicode как UTF-16. str () возвратит представление UTF-8 строки UTF-16.

0
ответ дан Jonathan Works 22 August 2008 в 12:01
поделиться
  • 1
    Можно ли объяснить, почему определение предпочтено в чертах? – Wolfsblvt 3 September 2015 в 08:10

Между тем я провел усовершенствованное исследование для проверки то, что внутреннее представление в Python, и также каковы его пределы". Истина О Unicode В Python " является очень хорошей статьей, которая цитирует непосредственно от разработчиков Python. По-видимому, внутреннее представление является или UCS-2 или UCS-4 в зависимости от переключателя времени компиляции. Так Jon, это не UTF-16, но Ваш ответ поместил меня на правильном пути так или иначе, спасибо.

8
ответ дан Patrick McElhaney 22 August 2008 в 12:01
поделиться
  • 1
    но я все еще должен повторно объявить a и b. Что, если черта имела некоторое значение по умолчанию для a и быть и я хочу использовать те значения сами. – Sohaib 11 June 2015 в 09:19

От Википедия на UTF-8:

UTF-8 (8-разрядный UCS/формат преобразования Unicode) кодировка символов переменной длины для Unicode. Это в состоянии представить любой символ в стандарте Unicode , все же начальное кодирование кодов байта и символьных присвоений для UTF-8 назад совместимо с ASCII. По этим причинам это постоянно становится предпочтительным кодированием для электронной почты, веб-страницы [1], и другие места, где символы хранятся или передаются потоком.

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

Из Википедии на Unicode:

В вычислении, Unicode является промышленным стандартом, позволяющим компьютеры последовательно представлять и управлять текстом, выраженным в [1 110] большинство систем письменности в мире .

, Таким образом, это в состоянии представить большинство (но не все) систем письменности в мире.

я надеюсь, что это помогает:)

-1
ответ дан Andy 22 August 2008 в 12:01
поделиться
  • 1
    Объясните свой последний оператор. Это, потому что реализация может быть или функцией или переменной? – BAR 10 September 2015 в 19:50

поэтому, что такое "строка Unicode" в Python?

Python 'знает', что Ваша строка является Unicode. Следовательно, если Вы сделаете regex на нем, это будет знать, который является символом и который не является и т.д., который действительно полезен. Если Вы сделали strlen, он также даст корректный результат. Поскольку пример, если Вы действительно представляли в виде строки, рассчитывает Привет, Вы доберетесь 5 (даже если это будет Unicode). Но если Вы провели строковый подсчет иностранного слова, и та строка не была строкой Unicode, чем у Вас будет намного больший результат. Pythong использует информационную форму База данных Символа Unicode для идентификации каждого символа в Строке Unicode. Надежда, которая помогает.

-2
ответ дан Ravi Chhabra 22 August 2008 в 12:01
поделиться
  • 1
    "case class extension should be avoided ". можно ли объяснить почему, @bajohns? – Kevin Meredith 23 December 2016 в 13:46
Другие вопросы по тегам:

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