Что означает + & lt; & gt; c. & Lt; & gt; означает в снимке памяти C #? [Дубликат]

Хранение данных:

  • Укажите набор символов utf8mb4 для всех таблиц и текстовых столбцов в вашей базе данных. Это делает MySQL физически хранить и извлекать значения, закодированные изначально в UTF-8. Обратите внимание, что MySQL будет неявно использовать кодировку utf8mb4, если задано сопоставление utf8mb4_* (без какого-либо явного набора символов).
  • В более старых версиях MySQL (& lt; 5.5.3) вы, к сожалению, принудительно использовать просто utf8, который поддерживает только подмножество символов Unicode. Мне хотелось бы, чтобы я шутил.

Доступ к данным:

  • В вашем коде приложения (например, PHP) в любом используемом вами способе доступа к базе данных вы будете необходимо установить кодировку соединения на utf8mb4. Таким образом, MySQL не выполняет преобразование из собственного UTF-8, когда он передает данные в ваше приложение и наоборот.
  • Некоторые драйверы предоставляют свой собственный механизм для настройки набора символов соединения, который как обновляет свои собственные внутреннее состояние и информирует MySQL о кодировании, которое будет использоваться в соединении - это, как правило, предпочтительный подход. В PHP: если вы используете уровень абстракции PDO с помощью PHP & ge; 5.3.6 вы можете указать charset в DSN :
    $dbh = new PDO('mysql:charset=utf8mb4');
    
    Если вы используете mysqli , вы можете вызвать set_charset() :
    $mysqli->set_charset('utf8mb4');       // object oriented style
    mysqli_set_charset($link, 'utf8mb4');  // procedural style
    
    Если вы застряли в простой mysql , но, возможно, работаете с PHP & ge; 5.2.3 вы можете вызвать mysql_set_charset .
  • Если драйвер не предоставляет свой собственный механизм для установки набора символов соединения, вам может потребоваться выдать запрос, чтобы сообщить MySQL, как ваше приложение ожидает, что данные в соединении будут закодированы: SET NAMES 'utf8mb4' .
  • Такое же соображение относительно utf8mb4 / utf8 применяется, как указано выше.

Выход:

  • Если ваше приложение передает текст другим системам, они также должны быть проинформированы о кодировке символов. В веб-приложениях браузер должен быть проинформирован о кодировке, в которой отправляются данные (через HTTP-заголовки ответов или метаданные HTML ).
  • В PHP вы можете использовать default_charset php.ini или вручную выпустить заголовок Content-Type MIME самостоятельно, что больше работает, но имеет тот же эффект.

Вход:

  • К сожалению, вы должны проверить каждую полученную строку как действительную UTF-8, прежде чем пытаться ее сохранить или использовать в любом месте. PHP mb_check_encoding() делает трюк, но вы должны использовать его религиозно. На самом деле этого не происходит, так как вредоносные клиенты могут отправлять данные в любую кодировку, и я не нашел трюка, чтобы заставить PHP сделать это для вас надежно.
  • Из моего показания текущего HTML spec , следующие подпузы не нужны или даже не действительны для современного HTML. Я понимаю, что браузеры будут работать и отправлять данные в набор символов, указанный для документа. Тем не менее, если вы ориентируетесь на более старые версии HTML (XHTML, HTML4 и т. Д.), Эти точки могут по-прежнему быть полезными: Для HTML до HTML5 только : вы хотите, чтобы все данные, отправленные вами браузерами, быть в UTF-8. К сожалению, если вы пойдете единственным способом надежно сделать это, добавьте атрибут accept-charset ко всем тэгам
    : . Для HTML до HTML5 только : обратите внимание, что спецификация HTML W3C говорит, что клиенты «должны» по умолчанию отправлять формы обратно на сервер в любой кодировке, обслуживаемой сервером, но это, по-видимому, только рекомендация, следовательно, необходимо явно указывать на каждый тэг .

Другие кодовые соображения:

  • Очевидно, что все файлы, которые вы будете обслуживать (PHP, HTML, JavaScript и т. д.), должны быть закодированы в действительном UTF-8.
  • Вы должны убедиться, что каждый раз, когда вы обрабатываете строку UTF-8, вы делаете это безопасно. Это, к сожалению, тяжелая часть. Вероятно, вы захотите широко использовать расширение PHP mbstring .
  • Встроенные строковые операции PHP - это not по умолчанию UTF-8 безопасно. Есть некоторые вещи, которые можно смело выполнять с обычными строковыми операциями PHP (например, конкатенация), но для большинства вещей вы должны использовать эквивалентную функцию mbstring.
  • Чтобы узнать, что вы делаете (читайте: not испортите это), вам действительно нужно знать UTF-8 и как он работает на минимально возможном уровне. Проверьте какие-либо ссылки из utf8.com на некоторые полезные ресурсы, чтобы узнать все, что вам нужно знать.

100
задан svick 15 June 2013 в 22:24
поделиться

1 ответ

Это недокументированные детали реализации компилятора и могут быть изменены в любое время. (ОБНОВЛЕНИЕ: см. GeneratedNames.cs в источниках C # для текущих данных, приведенное ниже описание несколько устарело.)

Однако, поскольку я хороший парень, вот некоторые из этих деталей:

Если у вас есть неиспользуемая локальная переменная, которую удаляет оптимизатор, мы все равно высылаем информацию об отладке для него в PDB. Мы привязали суффикс __Deleted$ к таким переменным, чтобы отладчик знал, что они были в исходном коде, но не представлены в двоичном файле.

Временные слоты переменной, выделенные компилятором, получают имена с шаблоном CS $ X $ Y, где X - «временный вид», а Y - количество выделенных временных рядов. Временные типы:

0 --> short lived temporaries
1 --> return value temporaries
2 --> temporaries generated for lock statements
3 --> temporaries generated for using statements
4 --> durable temporaries
5 --> the result of get enumerator in a foreach
6 --> the array storage in a foreach
7 --> the array index storage in a foreach.  

Временные виды между 8 и 264 являются дополнительными хранилищами индексов массивов для многомерных массивов.

Временные типы выше 264 используются для временного использования фиксированного оператора, фиксирующего строку.

Специальные имена, созданные компилятором, генерируются для:

1 --> the iterator state ("state")
2 --> the value of current in an iterator ("current")
3 --> a saved parameter in an iterator
4 --> a hoisted 'this' in an iterator ("this")
5 --> a hoisted local in an iterator
6 --> the hoisted locals from an outer scope
7 --> a hoisted wrapped value ("wrap")
8 --> the closure class instance ("locals")
9 --> the cached delegate instance ("CachedAnonymousMethodDelegate")
a --> the iterator instance ("iterator")
b --> an anonymous method
c --> anonymous method closure class ("DisplayClass")
d --> iterator class
e --> fixed buffer struct ("FixedBuffer")
f --> anonymous type ("AnonymousType")
g --> initializer local ("initLocal")
h --> query expression temporary ("TransparentIdentifier")
i --> anonymous type field ("Field")
j --> anonymous type type parameter ("TPar")
k --> auto prop field ("BackingField")
l --> iterator thread id
m --> iterator finally ("Finally")
n --> fabricated method ("FabricatedMethod")
o --> dynamic container class ("SiteContainer")
p --> dynamic call site ("Site")
q --> dynamic delegate ("SiteDelegate")
r --> com ref call local ("ComRefCallLocal")
s --> lock taken local ("LockTaken")

шаблон для генерации магических имен: P<N>C__SI где:

  • P является CS $ для кэшированных делегатов и отображает экземпляры классов, в противном случае пустые.
  • N - это имя, ассоциированное с именем с вещью, если любой
  • C является символом от 1 до s, указанным выше
  • S - описательный суффикс («текущий», «состояние» и т. д.), так что вы не обязательно иметь таблицу, записанную выше, при чтении метаданных.
  • I является необязательным уникальным номером
194
ответ дан Lennart 26 August 2018 в 09:07
поделиться
Другие вопросы по тегам:

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