Vec<Animal>
не является законным, но компилятор не может вам сказать, потому что несоответствие типа каким-то образом скрывает его. Если мы удалим вызовы на push
, компилятор даст нам следующую ошибку:
<anon>:22:9: 22:40 error: instantiating a type parameter with an incompatible type `Animal`, which does not fulfill `Sized` [E0144]
<anon>:22 let mut v: Vec<Animal> = Vec::new();
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Причина, по которой это не является законным, заключается в том, что Vec<T>
хранит много T
объектов последовательно в памяти. Тем не менее, Animal
является признаком, а черты не имеют размера (а Cat
и Dog
не имеют одинакового размера).
Чтобы решить эту проблему, нам нужно сохранить то, что имеет размер в Vec
. Наиболее простым решением является обертывание значений в Box
, то есть Vec<Box<Animal>>
. Box<T>
имеет фиксированный размер («указатель жира», если T - это признак, простой указатель в противном случае).
Вот работа main
:
fn main () {
let dog: Dog = Dog;
let cat: Cat = Cat;
let mut v: Vec<Box<Animal>> = Vec::new();
v.push(Box::new(cat));
v.push(Box::new(dog));
for animal in v.iter() {
println!("{}", animal.make_sound());
}
}
Измененный набор символов HTML на ISO-8859-1 решил проблему! Глупый
Выпуск SET NAMES 'utf8'
прямо после соединения:
$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");
Я был бы точно так же, как для обеспечения еще некоторой подробной информации о решении, предложенном vartec, который является (в зависимости от установки MySQL) наиболее правильным решением проблемы. В первую очередь, набор символов / кодирующий проблему в MySQL является несколько сложным предметом, который экстенсивно охвачен в руководстве MySQL Глава 9.1 "Поддержка Набора символов" . В Вашем случае особенно 9.1.4. "Наборы символов соединения и Сопоставления" будут самыми релевантными.
Для создания этого коротким: MySQL должен знать, какой набор символов / кодирование Вашего клиентского приложения (говорящий от базы данных persoective это - Ваш Сценарий PHP) ожидает, поскольку это транскодирует все строковые данные из внутреннего набора символов / кодирование, определенное в сервере - база данных - таблица - или уровень столбца в набор символов соединения / кодирование. Вы используете UTF-8 на стороне клиента, так должен сказать MySQL, что Вы используете UTF-8. Это сделано командой SET NAMES 'utf8'
MySQL, которая должна быть отправлена как первый запрос при открытии соединения. В зависимости от Вашей установки и на клиентской библиотеке MySQL Вы используете в Сценарии PHP, это может быть сделано автоматически на каждом подключении.
при использовании PDO, это - просто вопрос установки параметра конфигурации
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
Используя mysqli изменение клиентского набора символов / кодирование еще более просто:
$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");
я надеюсь, что это поможет сделать все это более понятным.
Имейте MySQL, переводят его автоматически
$conn = mysql_connect('host', 'user', 'password');
mysql_set_charset('utf8',$conn);
http://es.php.net/manual/en/function.mysql-set-charset.php
РЕДАКТИРОВАНИЕ: из Вашего комментария я собираюсь, что это на самом деле кодируется в latin1 так
mysql_set_charset('latin1_spanish_ci',$conn);
При контакте со специальными символами я всегда забочусь о следующем:
Вы уверены, что у Вас есть данные UTF8 в Вашей базе данных для начала?
черт возьми .. это сводило меня с ума. я пытался сделать то же самое. Я добавил HTML-заголовок с кодировкой utf-8 .. mysqli_set_charset () спас меня несколько часов спустя, но я рад, что теперь он работает
, другая функция для кодирования специальных символов и акцентов - htmlentities ()