Исходя из вашей проблемы, похоже, что вы хотите извлечь только некоторые пары ключ-значение из существующего словаря.
Попробуйте, как показано ниже:
data = {
"Bonjour": {
"English Word": "Hello",
"Type of word": "whatever",
"Definition": "Means good day",
"Use case example": "Bonjour igo",
"Additional information": "BRO"
}
}
currentword = data
search = "Bonjour"
result = dict((k, currentword[search][k]) for k in ['English Word', 'Definition', 'Use case example'])
for k,v in result.items():
print k + ":" + v
Результат:
Definition:Means good day
English Word:Hello
Use case example:Bonjour igo
Вот решение, которое наконец работало на меня:
$text = "你好";
// Convert UTF-8 string to HTML entities
$text = mb_convert_encoding($text, 'HTML-ENTITIES',"UTF-8");
// Convert HTML entities into ISO-8859-1
$text = html_entity_decode($text,ENT_NOQUOTES, "ISO-8859-1");
// Convert characters > 127 into their hexidecimal equivalents
$out = "";
for($i = 0; $i < strlen($text); $i++) {
$letter = $text[$i];
$num = ord($letter);
if($num>127) {
$out .= "&#$num;";
} else {
$out .= $letter;
}
}
Преобразование строки к объектам HTML работает за исключением того, что функция imagettftext () не принимает именованные сущности. Например,
日本語
в порядке, но
ç
не. При преобразовании назад в ISO-8859-1, преобразовывает именованные сущности назад в символы, но существует вторая проблема. imagettftext () не поддерживает символы со значением, больше, чем> 127. Финал для цикла кодирует эти символы в шестнадцатеричном. Это решение работает на меня с текстом, который я использую (включает японский язык, китайский, и акцентировал латинские символы для португальского языка), но я не на 100% уверен, что это будет работать во всех случаях.
Все они, гимнастика необходима, потому что imagettftext () действительно не принимает строки UTF-8 на моем сервере.
Мой главный подозреваемый является шрифтом, который Вы используете для рендеринга.
Согласно http://fr3.php.net/imagettftext, различные версии библиотеки GD, пользовавшейся php, могут показать другое поведение.
Править: Другая идея: можно ли проверить это $text = '日本語';
действительно сохраняется как это на Вашем рабочем сервере? Возможно, существует проблема кодирования с Вашим сценарием.
Следующее редактирование: BKB уже предложил это. Таким образом в случае, если это - причина: он был первым с ответом ;-)
Тот конкретный файл шрифтов существует на Вашей производственной машине? При использовании FTP для загрузки файлов Вы используете двоичное кодирование?
У меня была такая же проблема со скриптом, который будет выводить текст на изображение и выводить его. Проблема была в том, что из-за разных браузеров (или жесткости кода/паранойи, как бы вы не задумывались), я не мог знать, какая кодировка помещается внутри массива $_GET
.
Вот как я решил эту проблему.
$item_text = $_GET['text'];
# detect if the string was passed in as unicode
$text_encoding = mb_detect_encoding($item_text, 'UTF-8, ISO-8859-1');
# make sure it's in unicode
if ($text_encoding != 'UTF-8') {
$item_text = mb_convert_encoding($item_text, 'UTF-8', $text_encoding);
}
# html numerically-escape everything (&#[dec];)
$item_text = mb_encode_numericentity($item_text,
array (0x0, 0xffff, 0, 0xffff), 'UTF-8');
Это решает любую проблему с тем, что imagettftext
не может обрабатывать символы выше #127, просто меняя ВСЕ символы (включая многобайтовые символы Unicode) на их HTML цифровые символы - "A" для "A", "B" для "B", и т.д. - для чего страница руководства заявляет о поддержке.